Maintainer: | Laura Marshall <lhm@st-andrews.ac.uk> |
License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
Title: | Mark-Recapture Distance Sampling |
LazyLoad: | yes |
Description: | Animal abundance estimation via conventional, multiple covariate and mark-recapture distance sampling (CDS/MCDS/MRDS). Detection function fitting is performed via maximum likelihood. Also included are diagnostics and plotting for fitted detection functions. Abundance estimation is via a Horvitz-Thompson-like estimator. |
Version: | 3.0.1 |
URL: | https://github.com/DistanceDevelopment/mrds/ |
BugReports: | https://github.com/DistanceDevelopment/mrds/issues |
Depends: | R (≥ 4.1.0) |
Imports: | optimx (≥ 2013.8.6), mgcv, methods, numDeriv, nloptr, Rsolnp, Rdpack |
Suggests: | Distance, testthat, covr, knitr, rmarkdown, bookdown |
RoxygenNote: | 7.3.2 |
RdMacros: | Rdpack |
Encoding: | UTF-8 |
NeedsCompilation: | no |
Packaged: | 2025-07-05 02:26:10 UTC; lhm |
Author: | Laura Marshall [cre], Jeff Laake [aut], David Miller [aut], Felix Petersma [aut], Len Thomas [ctb], David Borchers [ctb], Jon Bishop [ctb], Jonah McArthur [ctb], Eric Rexstad [rev] |
Repository: | CRAN |
Date/Publication: | 2025-07-05 11:40:05 UTC |
Mark-Recapture Distance Sampling (mrds)
Description
This package implements both conventional distance sampling analysis and mark-recapture distance sampling methods for when detection on the transect is not certain. Mark-recapture distance sampling methods are described in Borchers et al. (1988), Laake (1999) and Borchers et al. (2006)
Details
Examples of distance sampling analyses are available at https://distancesampling.org/resources/vignettes.html.
For help with distance sampling and this package, there is a Google Group https://groups.google.com/forum/#!forum/distance-sampling.
Author(s)
Jeff Laake <jeff.laake@noaa.gov>, David Borchers <dlb@mcs.st-and.ac.uk>, Len Thomas <len@mcs.st-and.ac.uk>, David L. Miller <dave@ninepointeightone.net>, Jon Bishop <jonb@mcs.st-and.ac.uk>, Felix Petersma <ftp@st-andrews.ac.uk>
References
Borchers DL, Laake JL, Southwell C, Paxton CLG (2006).
“Accommodating unmodelled heterogeneity in double-observer distance sampling surveyss.”
Biometrics, 372-378.
Borchers DL, Zucchini W, Fewster RM (1988).
“Mark-recapture models for line transect surveys.”
Biometrics, 1207–1220.
Laake J (1999).
“Distance sampling with independent observers: reducing bias from heterogeneity by weakening the conditional independence assumption.”
In Marine mammal survey and assessment methods, 137-148.
CRC Press.
Akaike's An Information Criterion for detection functions
Description
Extract the AIC from a fitted detection function.
Usage
## S3 method for class 'ddf'
AIC(object, ..., k = 2)
Arguments
object |
a fitted detection function object |
... |
optionally more fitted model objects. |
k |
penalty per parameter to be used; the default |
Author(s)
David L Miller
Numeric Delta Method approximation for the variance-covariance matrix
Description
Computes delta method variance-covariance matrix of results of any generic
function fct
that computes a vector of estimates as a function of a
set of estimated parameters par
.
Usage
DeltaMethod(par, fct, vcov, delta, ...)
Arguments
par |
vector of parameter values at which estimates should be constructed |
fct |
function that constructs estimates from parameters |
vcov |
variance-covariance matrix of the parameters |
delta |
proportional change in parameters used to numerically estimate first derivative with central-difference formula (ignored) |
... |
any additional arguments needed by |
Details
The delta method (aka propagation of errors is based on Taylor series
approximation - see Seber's book on Estimation of Animal Abundance). It uses
the first derivative of fct
with respect to par
.
It also uses the variance-covariance matrix of the estimated parameters
which is derived in estimating the parameters and is an input argument.
The first argument of fct
should be par
which is a vector of
parameter estimates. It should return a single value (or vector) of
estimate(s). The remaining arguments of fct
if any can be passed to
fct
by including them at the end of the call to DeltaMethod
as
name=value
pairs.
Value
a list with values
variance |
estimated variance-covariance
matrix of estimates derived by |
partial |
matrix (or
vector) of partial derivatives of |
Note
This is a generic function that can be used in any setting beyond the
mrds
package. However this is an internal function for mrds
and the user does not need to call it explicitly.
Author(s)
Jeff Laake and David L Miller
Run MCDS.exe as a backend for mrds
Description
Rather than use the R-based detection function fitting algorithms provided in 'mrds', one can also use the algorithm used by Distance for Windows, implemented in the binary file 'MCDS.exe'. Note that with changes in R-based optimizer introduced in 'mrds' version 3.0.0 this is unlikely to result in better estimates. The option remains available, although it may be deprecated in a future release. To make use of this facility, one must first download the 'MCDS.exe' binary, as laid out below under 'Obtaining MCDS.exe'. Once the binary is installed, calls to 'ddf' will, by default, result in using the model being fit using both 'MCDS.exe' and the R-based algorithm, and the one with lower negative log-likelihood being selected. In almost all cases, both algorithms produce the same results, but we have found edge where one or other fails to find the likelihood maximum and hence trying both is useful.
Details
There may also be cases where the 'MCDS.exe' algorithm is faster than the R-based one.
Under this circumstance, you can choose to run only the 'MCDS.exe' algorithm via by setting
the 'ddf' argument control=list(optimizer='MCDS')
. For completeness, one can also
choose to use only the R-based algorithm by setting control=list(optimizer='R')
.
For more information and examples comparing the R-based and 'MCDS.exe' algorithms, see our examples pages at https://distancesampling.org/resources/vignettes.html
If you are running a non-Windows operating system, you can follow the instructions below to have 'MCDS.exe' run using 'wine'.
Obtaining MCDS.exe
The following code can be used to download 'MCDS.exe' from the distance
sampling website:
download.file("http://distancesampling.org/R/MCDS.exe", paste0(system.file(package="mrds"),"/MCDS.exe"), mode = "wb")
The MCDS binary will be installed to the main directory of your your local R
mrds library. Alternatively, you can copy the 'MCDS.exe' from your local
Distance for Windows installation if you prefer. The location of your local
mrds library main directory can be found by running the following in R:
system.file("MCDS.exe", package="mrds")
.
Running MCDS.exe on non-Windows platforms
This has been tentatively tested on a mac but should currently be considered largely experimental.
One can still use MCDS.exe even if you are running a mac computer. To do this one will need to install 'wine' a Windows emulator. It is important to use a version of 'wine' which can run 32-bit programs.
The package will attempt to work out which 'wine' binary to use (and detect if it is installed), but this doesn't always work. In this case, the location of the 'wine' binary can be specified in the 'control' 'list' provided to 'ddf' using the 'winebin' element or supply the 'winebin' argument to the 'ds' function. For example, if 'wine' is installed at '/usr/bin/local/wine' you can set 'control$winebin' to that location to use that binary.
On macOS, this can be achieved using the 'homebrew' package management
system and installing the 'wine-crossover' package. You may need to change
the control$winebin
to be 'wine', 'wine64' or 'wine32on64',
depending on your system's setup. This package tries to work out what to
do, but likely doesn't handle all corner cases. Currently this is untested
on Mac M1 systems.
Stopping using MCDS.exe
Once this feature is enabled, using 'ddf' will by default run both
its built-in R optimizer and 'MCDS.exe'. To disable this behaviour, specify which
you wish to use with via the optimizer=
option described above. Alternatively,
if you wish to permanently stop using MCDS.exe, remove
the 'MCDS.exe' binary file. You can find which folder it is in by running the following in R:
system.file("MCDS.exe", package="mrds")
.
Author(s)
David L Miller and Jonah McArthur
Compute estimated abundance in covered (sampled) region
Description
Generic function that computes abundance within the covered region. It calls method (class) specific functions for the computation.
Usage
NCovered(par, model = NULL, group = TRUE)
Arguments
par |
parameter values (used when computing derivatives wrt parameter
uncertainty); if NULL parameter values in |
model |
ddf model object |
group |
if TRUE computes group abundance and if FALSE individual abundance |
Value
abundance estimate
Author(s)
Jeff Laake
Add covariate levels detection function plots
Description
Add a line or lines to a plot of the detection function which correspond to a a given covariate combination. These can be particularly useful when there is a small number of factor levels or if quantiles of a continuous covariate are specified.
Usage
add.df.covar.line(ddf, data, ndist = 250, pdf = FALSE, breaks = "Sturges", ...)
add_df_covar_line(ddf, data, ndist = 250, pdf = FALSE, breaks = "Sturges", ...)
Arguments
ddf |
a fitted detection function object. |
data |
a |
ndist |
number of distances at which to evaluate the detection function. |
pdf |
should the line be drawn on the probability density scale; ignored for line transects. |
breaks |
required to ensure that PDF lines are the right size, should
match what is supplied to original |
... |
extra arguments to give to |
Details
All covariates must be specified in data
. Plots can become quite busy
when this approach is used. It may be useful to fix some covariates at their
median level and plot set values of a covariate of interest. For example
setting weather (e.g., Beaufort) to its median and plotting levels of
observer, then creating a second plot for a fixed observer with levels of
weather.
Arguments to lines
are supplied in ... and aesthetics like
line type (lty
), line width (lwd
) and colour (col
) are
recycled. By default lty
is used to distinguish between the lines. It
may be useful to add a legend
to the plot (lines are plotted
in the order of data
).
Value
invisibly, the values of detectability over the truncation range.
Author(s)
David L Miller
Examples
## Not run:
# fit an example model
data(book.tee.data)
egdata <- book.tee.data$book.tee.dataframe
result <- ddf(dsmodel = ~mcds(key = "hn", formula = ~sex),
data = egdata[egdata$observer==1, ], method = "ds",
meta.data = list(width = 4))
# make a base plot, showpoints=FALSE makes the plot less busy
plot(result, showpoints=FALSE)
# add lines for sex one at a time
add.df.covar.line(result, data.frame(sex=0), lty=2)
add.df.covar.line(result, data.frame(sex=1), lty=3)
# add a legend
legend(3, 1, c("Average", "sex==0", "sex==1"), lty=1:3)
# alternatively we can add both at once
# fixing line type and varying colour
plot(result, showpoints=FALSE)
add.df.covar.line(result, data.frame(sex=c(0,1)), lty=1,
col=c("red", "green"))
# add a legend
legend(3, 1, c("Average", "sex==0", "sex==1"), lty=1,
col=c("black", "red", "green"))
## End(Not run)
Check order of adjustment terms
Description
'adj.check.order' checks that the Cosine, Hermite or simple polynomials are of the correct order.
Usage
adj.check.order(adj.series, adj.order, key)
Arguments
adj.series |
Adjustment series used
(' |
adj.order |
Integer to check |
key |
key function to be used with this adjustment series |
Details
Only even functions are allowed as adjustment terms, per p.47 of Buckland et
al (2001). If incorrect terms are supplied then an error is throw via
stop
.
Value
Nothing! Just calls stop
if something goes wrong.
Author(s)
David Miller
References
S.T.Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake. 1993. Robust Models. In: Distance Sampling, eds. S.T.Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake. Chapman & Hall.
See Also
adjfct.cos
, adjfct.poly
,
adjfct.herm
, detfct
, mcds
,
cds
Cosine adjustment term, not the series.
Description
For internal use only – not to be called by 'mrds' or 'Distance' users directly.
Usage
adj.cos(distance, scaling, adj.order)
Arguments
distance |
perpendicular distance vector/scalar |
scaling |
scale parameter |
adj.order |
the adjustment order |
Value
scalar or vector containing the cosine adjustment term for every
value in distance
argument
Author(s)
Felix Petersma
Hermite polynomial adjustment term, not the series.
Description
For internal use only – not to be called by 'mrds' or 'Distance' users directly.
Usage
adj.herm(distance, scaling, adj.order)
Arguments
distance |
perpendicular distance vector/scalar |
scaling |
scale parameter |
adj.order |
the adjustment order |
Value
scalar or vector containing the Hermite adjustment term for every
value in distance
argument
Author(s)
Felix Petersma
Simple polynomial adjustment term, not the series.
Description
For internal use only – not to be called by 'mrds' or 'Distance' users directly.
Usage
adj.poly(distance, scaling, adj.order)
Arguments
distance |
perpendicular distance vector/scalar |
scaling |
scale parameter |
adj.order |
the adjustment order |
Value
scalar or vector containing the polynomial adjustment term for every
value in distance
argument
Author(s)
Felix Petersma
Series of the gradient of the cosine adjustment series w.r.t. the scaled distance.
Description
For internal use only – not to be called by 'mrds' or 'Distance' users directly.
Usage
adj.series.grad.cos(
distance,
scaling = 1,
adj.order,
adj.parm = NULL,
adj.exp = FALSE
)
Arguments
distance |
perpendicular distance vector/scalar |
scaling |
scale parameter |
adj.order |
the adjustment order |
adj.parm |
vector of parameters (a_j) |
adj.exp |
boolean, defaults to FALSE |
Value
scalar or vector containing the gradient of the cosine adjustment
series for every value in distance
argument
Author(s)
Felix Petersma
Series of the gradient of the Hermite polynomial adjustment series w.r.t. the scaled distance.
Description
For internal use only – not to be called by 'mrds' or 'Distance' users directly.
Usage
adj.series.grad.herm(
distance,
scaling = 1,
adj.order,
adj.parm = NULL,
adj.exp = FALSE
)
Arguments
distance |
perpendicular distance vector/scalar |
scaling |
scale parameter |
adj.order |
the adjustment order |
adj.parm |
vector of parameters (a_j) |
adj.exp |
boolean, defaults to FALSE |
Value
scalar or vector containing the gradient of the Hermite adjustment
series for every value in distance
argument
Author(s)
Felix Petersma
Series of the gradient of the simple polynomial adjustment series w.r.t. the scaled distance.
Description
For internal use only – not to be called by 'mrds' or 'Distance' users directly.
Usage
adj.series.grad.poly(
distance,
scaling = 1,
adj.order,
adj.parm = NULL,
adj.exp = FALSE
)
Arguments
distance |
perpendicular distance vector/scalar |
scaling |
scale parameter |
adj.order |
the adjustment order |
adj.parm |
vector of parameters (a_j) |
adj.exp |
boolean, defaults to FALSE |
Value
scalar or vector containing the gradient of the polynomial adjustment
series for every value in distance
argument
Author(s)
Felix Petersma
Get the apex for a gamma detection function
Description
Get the apex for a gamma detection function
Usage
apex.gamma(ddfobj)
Arguments
ddfobj |
ddf object |
Value
the distance at which the gamma peaks
Author(s)
Jeff Laake
Assign default values to list elements that have not been already assigned
Description
Assigns default values for argument
in list x
from
argument=value
pairs in ... if x$argument
doesn't already
exist
Usage
assign.default.values(x, ...)
Arguments
x |
generic list |
... |
unspecified list of argument=value pairs that are used to assign values |
Value
x - list with filled values
Author(s)
Jeff Laake
Extraction and assignment of parameters to vector
Description
Assigns parameters of a particular type (scale, shape, adjustments or g0
(p(0))) from the vector of parameters in ddfobj
. All of the
parameters are kept in a single vector for optimization even though they
have very different uses. assign.par
parses them from the vector
based on a known structure and assigns them into ddfobj
.
Usage
assign.par(ddfobj, fpar)
Arguments
ddfobj |
distance sampling object (see |
fpar |
parameter vector |
Details
getpar
extracts the requested types from ddfobj
.
Value
if index==FALSE
, vector of parameters that were requested or
index==TRUE
, vector of 3 indices for scale, shape, adjustment
Note
Internal functions not intended to be called by user.
Author(s)
Jeff Laake
See Also
getpar
Average detection function line for plotting
Description
For models with covariates the detection probability for each observation can vary. This function computes an average value for a set of distances to plot an average line to graphically represent the fitted model in plots that compare histograms and the scatter of individual estimated detection probabilities. Averages are calculated over the observed covariate combinations.
Usage
average.line(finebr, obs, model)
Arguments
finebr |
set of fine breaks in distance over which detection function values are averaged and plotted |
obs |
value of observer for averaging (1-2 individual observers; 3 duplicates; 4 pooled observation team) |
model |
ddf model object |
Value
list with 2 elements
xgrid | vector of gridded distance values |
values | vector of average detection function values at
the xgrid values |
Note
Internal function called from plot functions for ddf objects
Author(s)
Jeff Laake
Average conditional detection function line for plotting
Description
For models with covariates the detection probability for each observation can vary. This function computes an average value for a set of distances to plot an average line to graphically represent the fitted model in plots that compare histograms and the scatter of individual estimated detection probabilities.
Usage
average.line.cond(finebr, obs, model)
Arguments
finebr |
set of fine breaks in distance over which detection function values are averaged and plotted |
obs |
value of observer for averaging (1-2 individual observers) |
model |
ddf model object |
Value
list with 2 elements:
xgrid | vector of gridded distance values |
values | vector of average detection function values at
the xgrid values |
Note
Internal function called from plot functions for ddf
objects
Author(s)
Jeff Laake
Golf tee data used in chapter 6 of Advanced Distance Sampling examples
Description
Double platform data collected in a line transect survey of golf tees by 2 observers at St. Andrews. Field sex was actually colour of the golf tee: 0 - green; 1 - yellow. Exposure was either low (0) or high(1) depending on height of tee above the ground. size was the number of tees in an observed cluster.
Format
A list of 4 dataframes, with the list elements named: book.tee.dataframe, book.tee.region, book.tee.samples and book.tee.obs.
book.tee.dataframe is the distance sampling data
dataframe. Used in the call to fit the detection function in ddf
.
Contains the following columns:
- object
numeric object id
- observer
factor representing observer 1 or 2
- detected
numeric 1 if the animal was detected 0 otherwise
- distance
numeric value for the distance the animal was detected
- size
numeric value for the group size
- sex
numeric value for sex of animal
- exposure
numeric value for exposure level 0 or 1
book.tee.region: is the region table dataframe. Used to
supply the strata areas to the dht
function. Contains the following
columns:
- Region.Label
factor giving the strata labels
- Area
numeric value giving the strata areas
book.tee.samples is the samples table dataframe to match
the transect ids to the region ids and supply the effort. Used in the
dht
function. Contains the following columns:
- Sample.Label
numeric giving the sample / transect labels
- Region.Label
factor giving the strata labels
- Effort
numeric value giving the sample / transect lengths
book.tee.obs is the observations table dataframe to match
the object ids in the distance data to the transect labels. Used in the
dht
function. Contains the following columns:
- object
numeric value object id
- Region.Label
factor giving the strata labels
- Sample.Label
numeric giving the sample / transect labels
Find se of average p and N
Description
Find se of average p and N
Usage
calc.se.Np(model, avgp, n, average.p)
Arguments
model |
a |
avgp |
average p function |
n |
sample size |
average.p |
the average probability of detection for the model |
Author(s)
David L. Miller
Cumulative distribution function (cdf) for fitted distance sampling detection function
Description
Computes cdf values of observed distances from fitted distribution. For a set of observed x it returns the integral of f(x) for the range= (inner, x), where inner is the innermost distance which is observable (either 0 or left if left truncated). In terms of g(x) this is the integral of g(x) over range divided by the integral of g(x) over the entire range of the data (inner, W).
Usage
cdf.ds(model, newdata = NULL)
Arguments
model |
fitted distance sampling model |
newdata |
new data values if computed for values other than the original observations |
Value
vector of cdf values for each observation
Note
This is an internal function that is not intended to be invoked
directly. It is called by qqplot.ddf
to compute values for
Kolmogorov-Smirnov and Cramer-von Mises tests and the Q-Q plot.
Author(s)
Jeff Laake
See Also
CDS function definition
Description
Creates model formula list for conventional distance sampling using values
supplied in call to ddf
Usage
cds(
key = NULL,
adj.series = NULL,
adj.order = NULL,
adj.scale = "width",
adj.exp = FALSE,
formula = ~1,
shape.formula = ~1
)
Arguments
key |
string identifying key function (currently either "hn" (half-normal),"hr" (hazard-rate), "unif" (uniform) or "gamma" (gamma distribution) |
adj.series |
string identifying adjustment functions cos (Cosine), herm (Hermite polynomials), poly (simple polynomials) or NULL |
adj.order |
vector of order of adjustment terms to include |
adj.scale |
whether to scale the adjustment terms by "width" or "scale" |
adj.exp |
if TRUE uses exp(adj) for adjustment to keep f(x)>0 |
formula |
formula for scale function (included for completeness only only formula=~1 for cds) |
shape.formula |
formula for shape function |
Value
A formula list used to define the detection function model
fct |
string "cds" |
key |
key function string |
adj.series |
adjustment function string |
adj.order |
adjustment function orders |
adj.scale |
adjustment function scale type |
formula |
formula for scale function |
shape.formula |
formula for shape function |
Author(s)
Jeff Laake; Dave Miller
Check parameters bounds during optimisations
Description
Simple internal function to check that the optimisation didn't hit bounds.
Based on code that used to live in detfct.fit.opt
.
Usage
check.bounds(lt, lowerbounds, upperbounds, ddfobj, showit, setlower, setupper)
Arguments
lt |
optimisation object |
lowerbounds |
current lower bounds |
upperbounds |
current upper bounds |
ddfobj |
ddf object |
showit |
debug level |
setlower |
were lower bounds set by the user |
setupper |
were upper bounds set by the user |
Value
TRUE
if parameters are close to the bound, else FALSE
Author(s)
Dave Miller; Jeff Laake
Check that a detection function is monotone
Description
Check that a fitted detection function is monotone non-increasing.
Usage
check.mono(
df,
strict = TRUE,
n.pts = 100,
tolerance = 1e-08,
plot = FALSE,
max.plots = 6
)
Arguments
df |
a fitted detection function object |
strict |
if |
n.pts |
number of points between left and right truncation at which to evaluate the detection function (default 100) |
tolerance |
numerical tolerance for monotonicity checks (default 1e-8) |
plot |
plot a diagnostic highlighting the non-monotonic areas (default
|
max.plots |
when |
Details
Evaluates a series of points over the range of the detection function (left to right truncation) then determines:
1. If the detection function is always less than or equal to its value at
the left truncation (g(x)<=g(left)
, or usually g(x)<=g(0)
).
2. (Optionally) The detection function is always monotone decreasing
(g(x[i])<=g(x[i-1])
). This check is only performed when
strict=TRUE
(the default).
3. The detection function is never less than 0 (g(x)>=0
).
4. The detection function is never greater than 1 (g(x)<=1
).
For models with covariates in the scale parameter of the detection function is evaluated at all observed covariate combinations.
Currently covariates in the shape parameter are not supported.
Value
TRUE
if the detection function is monotone, FALSE
if
it's not. warning
s are issued to warn the user that the function is
non-monotonic.
Author(s)
David L. Miller, Felix Petersma
Extract coefficients
Description
Extract coefficients and provide a summary of parameters and estimates
from the output of ddf
model objects.
Usage
## S3 method for class 'ds'
coef(object,...)
## S3 method for class 'io'
coef(object,...)
## S3 method for class 'io.fi'
coef(object,...)
## S3 method for class 'trial'
coef(object,...)
## S3 method for class 'trial.fi'
coef(object,...)
## S3 method for class 'rem'
coef(object,...)
## S3 method for class 'rem.fi'
coef(object,...)
Arguments
object |
ddf model object of class |
... |
unspecified arguments that are unused at present |
Value
For coef.ds
List of data frames for coefficients (scale and exponent
(if hazard))
scale |
dataframe of scale coefficient estimates and standard errors |
exponent |
dataframe with exponent estimate and standard error if hazard detection function |
For all others Data frame containing each coefficient and standard error
Note
These functions are called by the generic function coef
for any
ddf
model object. It can be called directly by the user, but it is
typically safest to use coef
which calls the appropriate function
based on the type of model.
Author(s)
Jeff Laake
Horvitz-Thompson estimates 1/p_i or s_i/p_i
Description
Compute individual components of Horvitz-Thompson abundance estimate in covered region for a particular subset of the data depending on value of group = TRUE (do group abundance); FALSE(do individual abundance)
Usage
compute.Nht(pdot, group = TRUE, size = NULL)
Arguments
pdot |
vector of estimated detection probabilities |
group |
if TRUE (do group abundance); FALSE(do individual abundance) |
size |
vector of group size values for clustered populations |
Value
vector of H-T components for abundance estimate
Note
Internal function called by covered.region.dht
Author(s)
Jeff Laake
Covered region estimate of abundance from Horvitz-Thompson-like estimator
Description
Computes H-T abundance within covered region by sample.
Usage
covered.region.dht(obs, samples, group)
Arguments
obs |
observations table |
samples |
samples table |
group |
if TRUE compute abundance of group otherwise abundance of individuals |
Value
Nhat.by.sample - dataframe of abundance by sample
Note
Internal function called by dht
and related functions
Author(s)
Jeff Laake
Create bins from a set of binned distances and a set of cutpoints.
Description
This is an internal routine and shouldn't be necessary in normal analyses.
Usage
create.bins(data, cutpoints)
Arguments
data |
'data.frame' with at least the column 'distance'. |
cutpoints |
vector of cutpoints for the bins |
Value
argument 'data' with two extra columns 'distbegin' and 'distend'.
Author(s)
David L. Miller
create.command.file
Description
create.command.file
Usage
create.command.file(dsmodel = call(), data, method, meta.data, control)
Arguments
dsmodel |
distance sampling model specification |
data |
dataframe containing data to be analyzed |
method |
analysis method |
meta.data |
list containing settings controlling data structure |
control |
list containing settings controlling model fitting |
Author(s)
Jonah McArthur
Create detection function object
Description
Creates and populates a specific list structure to define a detection
function object and its data. The ddfobj
is used throughout the
package as a calling argument to various functions.
Usage
create.ddfobj(model, xmat, meta.data, initial)
Arguments
model |
model list with key function and possibly adjustment functions, scale formula, and shape formula |
xmat |
model data frame |
meta.data |
list of options describing data like width, etc |
initial |
named list of initial values for parameters of the detection
function (should have at least |
Value
Distance sampling function object list with elements that all can be null except type:
type |
type of detection function hn, hr, gamma, unif, logistic |
xmat |
model data frame |
intercept.only |
TRUE if scale = ~1 and any shape formula =~1 |
scale |
sublist with elements (can be NULL i.e., unif key):formula, parameters, design matrix (dm) |
shape |
sublist with elements (power of hazard rate or gamma) (can be NULL i.e., unif or hn key):formula, parameters, design matrix (dm) |
adjustment |
sublist with elements (is NULL if no adjustments used):series,order,scale,parameters |
g0 |
sublist with elements (not used at present):formula,parameters, design matrix(dm), link |
Note
Internal function not meant to be called by user
Author(s)
Jeff Laake
See Also
Create a model frame for ddf fitting
Description
Creates a model.frame for distance detection function fitting. It includes some pre-specified and computed variables with those included in the model specified by user (formula)
Usage
create.model.frame(xmat, scale.formula, meta.data, shape.formula = NULL)
Arguments
xmat |
dataframe for ddf |
scale.formula |
user specified formula for scale of distance detection function |
meta.data |
user-specified meta.data (see |
shape.formula |
user specified formula for shape parameter of distance detection function |
Details
The following fields are always included: detected, observer, binned, and optionally distance (unless null), timesdetected (if present in data). If the distance data were binned, include distbegin and distend point fields. If the integration width varies also include int.begin and int.end and include an offset field for an iterative glm, if used. Beyond these fields only fields used in the model formula are included.
Value
model frame for analysis
Note
Internal function and not called by user
Author(s)
Jeff Laake
Creates structures needed to compute abundance and variance
Description
Creates samples and obs dataframes used to compute abundance and its variance based on a structure of geographic regions and samples within each region. The intent is to generalize this routine to work with other sampling structures.
Usage
create.varstructure(model, region, sample, obs, dht.se)
Arguments
model |
fitted ddf object |
region |
region table |
sample |
sample table |
obs |
table of object #'s and links to sample and region table |
dht.se |
is uncertainty going to be calculated later? |
Details
The function performs the following tasks: 1)tests to make sure that region labels are unique, 2) merges sample and region tables into a samples table and issue a warning if not all samples were used, 3) if some regions have no samples or if some values of Area were not valid areas given then issue error and stop, then an error is given and the code stops, 4) creates a unique region/sample label in samples and in obs, 5) merges observations with sample and issues a warning if not all observations were used, 6) sorts regions by its label and merges the values with the predictions from the fitted model based on the object number and limits it to the data that is appropriate for the fitted detection function.
Value
List with 2 elements:
samples |
merged dataframe containing region and sample info - one record per sample |
obs |
merged observation data and links to region and samples |
Note
Internal function called by dht
Author(s)
Jeff Laake
Distance Detection Function Fitting
Description
Generic function for fitting detection functions for distance sampling with
single and double observer configurations. Independent observer, trial and
dependent observer (removal) configurations are included. This is a generic
function which does little other than to validate the calling arguments and
methods and then calls the appropriate method
specific function to do
the analysis.
Usage
ddf(
dsmodel = call(),
mrmodel = call(),
data,
method = "ds",
meta.data = list(),
control = list(),
call = NULL
)
Arguments
dsmodel |
distance sampling model specification |
mrmodel |
mark-recapture model specification |
data |
dataframe containing data to be analyzed |
method |
analysis method |
meta.data |
list containing settings controlling data structure |
control |
list containing settings controlling model fitting |
call |
not implemented for top level ddf function, this is set by ddf as it is passed to the other ddf generics. |
Details
The fitting code has certain expectations about data
. It should be a
dataframe with at least the following fields named and defined as follows:
object | object number |
observer | observer number (1 or 2) for double observer; only 1 if single observer |
detected | 1 if detected by the observer and 0 if missed; always 1 for single observer |
distance | perpendicular distance |
If the data are for clustered objects, the dataframe should also contain a
field named size
that gives the observed number in the cluster. If
the data are for a double observer survey, then there are two records for
each observation and each should have the same object number. The code
assumes the observations are listed in the same order for each observer such
that if the data are subsetted by observer
there will be the same
number of records in each and each subset will be in the same object
order. In addition to these predefined and pre-named fields, the dataframe
can have any number and type of fields that are used as covariates in the
dsmodel
and mrmodel
. At present, discrepancies between
observations in distance
, size
and any user-specified
covariates cannot be assimilated into the uncertainty of the estimate. The
code presumes the values for those fields are the same for both records
(observer=1 and observer=2) and it uses the value from observer 1. Thus it
makes sense to make the values the same for both records in each pair even
when both detect the object or when observer 1 doesn't detect the object the
data would have to be taken from observer 2 and would not be consistent.
Five different fitting methods are currently available and these in turn
define whether dsmodel
and mrmodel
need to be defined.
Method | Single/Double | dsmodel | mrmodel |
ds | Single | yes | no |
io | Double | yes | yes |
io.fi | Double | no | yes |
trial | Double | yes | yes |
trial.fi | Double | no | yes |
rem | Double | yes | yes |
rem.fi | Double | no | yes |
Methods with the suffix ".fi
" use the assumption of full independence
and do not use the distance sampling portion of the likelihood which is why a
dsmodel
is not needed. An mrmodel
is only needed for double
observer surveys and thus is not needed for method ds
.
The dsmodel
specifies the detection function g(y) for the distance
sampling data and the models restrict g(0)=1. For single observer data g(y)
is the detection function for the single observer and if it is a double
observer survey it is the relative detection function (assuming g(0)=1) of
both observers as a team (the unique observations from both observers). In
double observer surveys, the detection function is p(y)=p(0)g(y) such that
p(0)<1. The detection function g(y) is specified by dsmodel
and p(0)
estimated from the conditional detection functions (see mrmodel
below). The value of dsmodel
is specified using a hybrid
formula/function notation. The model definition is prefixed with a ~
and the remainder is a function definition with specified arguments. At
present there are two different functions, cds
and
mcds
, for conventional distance sampling and multi-covariate
distance sampling. Both functions have the same required arguments
(key
,formula
). The first specifies the key function this
can be half-normal ("hn"), hazard-rate ("hr"), gamma ("gamma") or uniform
("unif"). The argument formula
specifies the formula
for the log of the scale parameter of the key function (e.g., the equivalent
of the standard deviation in the half-normal). The variable distance
should not be included in the formula because the scale is for distance.
See Marques and Buckland (2004) for more details on the
representation of the scale formula. For the hazard rate and gamma
functions, an additional shape.formula
can be specified for the model
of the shape parameter. The default will be ~1.
Adjustment terms can be specified by setting adj.series
which can have
the values: "none", "cos" (cosine), "poly" (polynomials), and "herm"
(Hermite polynomials). One must also specify a vector of orders for the
adjustment terms (adj.order
) and a scaling (adj.scale
) which
may be "width" or "scale" (for scaling by the scale parameter). Note that
the uniform key can only be used with adjustments (usually cosine adjustments
for a Fourier-type analysis).
The mrmodel
specifies the form of the conditional detection functions
(i.e.,probability it is seen by observer j given it was seen by observer
3-j) for each observer (j=1,2) in a double observer survey. The value is
specified using the same mix of formula/function notation but in this case
the functions are glm
and gam
. The arguments for the
functions are formula
and link
. At present, only glm
is allowed and it is restricted to link=logit
. Thus, currently the
only form for the conditional detection functions is logistic as expressed
in eq 6.32 of Laake and Borchers (2004). In contrast to dsmodel
, the
argument formula
will typically include distance
and all other
covariates that affect detection probability. For example,
mrmodel=~glm(formula=~distance+size+sex)
constructs a conditional
detection function based on the logistic form with additive factors,
distance, size, and sex. As another example,
mrmodel=~glm(formula=~distance*size+sex)
constructs the same model
with an added interaction between distance and size.
The argument meta.data
is a list that enables various options about
the data to be set. These options include:
point
if
TRUE
the data are from point counts andFALSE
(default) implies line transect datawidth
distance specifying half-width of the transect
left
distance specifying inner truncation value
binned
TRUE
orFALSE
to specify whether distances should be binned for analysisbreaks
if
binned=TRUE
, this is a required sequence of break points that are used for plotting/gof. They should matchdistbegin
,distend
values if bins are fixedint.range
an integration range for detection probability; either a vector of 2 or matrix with 2 columns
mono
constrain the detection function to be weakly monotonically decreasing (only applicable when there are no covariates in the detection function)
mono.strict
when
TRUE
constrain the detection function to be strictly monotonically decreasing (again, only applicable when there are no covariates in the detection function)
Using meta.data=list(int.range=c(1,10))
is the same as
meta.data=list(left=1,width=10)
. If
meta.data=list(binned=TRUE)
is used, the dataframe needs to contain
the fields distbegin and distend for each observation which specify the left
and right hand end points of the distance interval containing the
observation. This is a general data structure that allows the intervals to
change rather than being fixed as in the standard distance analysis tools.
Typically, if the intervals are changing so is the integration range. For
example, assume that distance bins are generated using fixed angular
measurements from an aircraft in which the altitude is varying. Because all
analyses are truncated (i.e., the last interval does not go to infinity),
the transect width (and the left truncation point if there is a blindspot
below the aircraft) can potentially change for each observation. The
argument int.range
can also be entered as a matrix with 2 columns
(left and width) and a row for each observation.
The argument control
is a list that enables various analysis options
to be set. It is not necessary to set any of these for most analyses. They
were provided so the user can optionally see intermediate fitting output and
to control fitting if the algorithm doesn't converge which happens
infrequently. The list values include:
showit
Integer (0-3, default 0) controls the (increasing)amount of information printed during fitting. 0 - none, >=1 - information about refitting and bound changes is printed, >=2 - information about adjustment term fitting is printed, ==3 -per-iteration parameter estimates and log-likelihood printed.
estimate
if FALSE fits model but doesn't estimate predicted probabilities
refit
if TRUE the algorithm will attempt multiple optimizations at different starting values if it doesn't converge
nrefits
number of refitting attempts
initial
a named list of starting values for the dsmodel parameters (e.g.
$scale
,$shape
,$adjustment
)lowerbounds
a vector of lowerbounds for the dsmodel parameters in the order the ds parameters will appear in the par element of the ddf object, i.e.
fit.ddf$par
wherefit.ddf
is a fitted ddf model.upperbounds
a vector of upperbounds for the dsmodel parameters in the order the ds parameters will appear in the par element of the ddf object, i.e.
fit.ddf$par
wherefit.ddf
is a fitted ddf model.limit
if TRUE restrict analysis to observations with
detected
=1debug
if TRUE, if fitting fails, return an object with fitting information
nofit
if TRUE don't fit a model, but use the starting values and generate an object based on those values
optimx.method
one (or a vector of) string(s) giving the optimisation method to use. If more than one is supplied, the results from one are used as the starting values for the next. See
optimx
optimx.maxit
maximum number of iterations to use in the optimisation.
mono.random.start
By default when monotonicity constraints are enforced, a grid of starting values are tested. Instead random starting values can be used (uniformly distributed between the upper and lower bounds). Set
TRUE
for random start,FALSE
(default) uses the grid methodmono.method
The optimiser method to be used when (strict) monotonicity is enforced. Can be either
slsqp
orsolnp
. Defaultslsqp
.mono.startvals
Controls if the mono.optimiser should find better starting values by first fitting a key function without adjustments, and then use those start values for the key function parameters when fitting the key + adjustment series detection function. Defaults to
FALSE
mono.outer.iter
Number of outer iterations to be used by
solnp
when fitting a monotonic model andsolnp
is selected. Default 200.silent
silences warnings within ds fitting method (helpful for running many times without generating many warning/error messages).
optimizer
By default this is set to 'both' for single observer analyses and 'R' for double observer analyses. For single observer analyses where optimizer = 'both', the R optimizer will be used and if present the MCDS optimizer will also be used. The result with the best likelihood value will be selected. To run only a specified optimizer set this value to either 'R' or 'MCDS'. The MCDS optimizer cannot currently be used for detection function fitting with double observer analyses. See
mcds_dot_exe
for more information.winebin
Location of the
wine
binary used to runMCDS.exe
. See mcds_dot_exe for more information.
Examples of distance sampling analyses are available at https://distancesampling.org/resources/vignettes.html.
Hints and tips on fitting (particularly optimisation issues) are on the
mrds_opt
manual page.
Value
model object of class=(method, "ddf")
Author(s)
Jeff Laake
References
Laake JL, Borchers DL (2004).
“Advanced distance sampling: estimating abundance of biological population.”
In chapter Methods for incomplete detection at distance zero.
Oxford University Press.
Marques FFC, Buckland ST (2004).
“Advanced distance sampling.”
In chapter Covariate models for the detection function, 31-47.
Oxford University Press.
See Also
ddf.ds
, ddf.io
,
ddf.io.fi
, ddf.trial
,
ddf.trial.fi
, ddf.rem
, ddf.rem.fi
,
mrds_opt
Examples
# load data
data(book.tee.data)
region <- book.tee.data$book.tee.region
egdata <- book.tee.data$book.tee.dataframe
samples <- book.tee.data$book.tee.samples
obs <- book.tee.data$book.tee.obs
# fit a half-normal detection function
result <- ddf(dsmodel=~mcds(key="hn", formula=~1), data=egdata, method="ds",
meta.data=list(width=4))
# fit an independent observer model with full independence
result.io.fi <- ddf(mrmodel=~glm(~distance), data=egdata, method="io.fi",
meta.data=list(width = 4))
# fit an independent observer model with point independence
result.io <- ddf(dsmodel=~cds(key = "hn"), mrmodel=~glm(~distance),
data=egdata, method="io", meta.data=list(width=4))
## Not run:
# simulated single observer point count data (see ?ptdata.single)
data(ptdata.single)
ptdata.single$distbegin <- (as.numeric(cut(ptdata.single$distance,
10*(0:10)))-1)*10
ptdata.single$distend <- (as.numeric(cut(ptdata.single$distance,
10*(0:10))))*10
model <- ddf(data=ptdata.single, dsmodel=~cds(key="hn"),
meta.data=list(point=TRUE,binned=TRUE,breaks=10*(0:10)))
summary(model)
plot(model,main="Single observer binned point data - half normal")
model <- ddf(data=ptdata.single, dsmodel=~cds(key="hr"),
meta.data=list(point=TRUE, binned=TRUE, breaks=10*(0:10)))
summary(model)
plot(model, main="Single observer binned point data - hazard rate")
dev.new()
# simulated double observer point count data (see ?ptdata.dual)
# setup data
data(ptdata.dual)
ptdata.dual$distbegin <- (as.numeric(cut(ptdata.dual$distance,
10*(0:10)))-1)*10
ptdata.dual$distend <- (as.numeric(cut(ptdata.dual$distance,
10*(0:10))))*10
model <- ddf(method="io", data=ptdata.dual, dsmodel=~cds(key="hn"),
mrmodel=~glm(formula=~distance*observer),
meta.data=list(point=TRUE, binned=TRUE, breaks=10*(0:10)))
summary(model)
plot(model, main="Dual observer binned point data", new=FALSE, pages=1)
model <- ddf(method="io", data=ptdata.dual,
dsmodel=~cds(key="unif", adj.series="cos", adj.order=1),
mrmodel=~glm(formula=~distance*observer),
meta.data=list(point=TRUE, binned=TRUE, breaks=10*(0:10)))
summary(model)
par(mfrow=c(2,3))
plot(model,main="Dual observer binned point data",new=FALSE)
## End(Not run)
CDS/MCDS Distance Detection Function Fitting
Description
Fits a conventional distance sampling (CDS) (likelihood eq 6.6 in Laake and
Borchers 2004) or multi-covariate distance sampling (MCDS)(likelihood eq
6.14 in Laake and Borchers 2004) model for the detection function of
observed distance data. It only uses key functions and does not incorporate
adjustment functions as in CDS/MCDS analysis engines in DISTANCE (Marques
and Buckland 2004). Distance can be grouped (binned), ungrouped (unbinned)
or mixture of the two. This function is not called directly by the user and
is called from ddf
,ddf.io
, or ddf.trial
.
Usage
## S3 method for class 'ds'
ddf(
dsmodel,
mrmodel = NULL,
data,
method = "ds",
meta.data = list(),
control = list(),
call
)
Arguments
dsmodel |
model list with key function and scale formula if any |
mrmodel |
not used |
data |
|
method |
analysis method; only needed if this function called from
|
meta.data |
|
control |
|
call |
original function call if this function not called directly from
|
Details
For a complete description of each of the calling arguments, see
ddf
. The argument model
in this function is the same
as dsmodel
in ddf
. The argument dataname
is the name
of the dataframe specified by the argument data
in ddf
. The
arguments control
,meta.data
,and method
are defined the
same as in ddf
.
Value
result: a ds
model object
Note
If mixture of binned and unbinned distance, width must be set to be >= largest interval endpoint; this could be changed with a more complicated analysis; likewise, if all binned and bins overlap, the above must also hold; if bins don't overlap, width must be one of the interval endpoints; same holds for left truncation Although the mixture analysis works in principle it has not been tested via simulation.
Author(s)
Jeff Laake
References
Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete detection at distance zero. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R. Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
Marques, F.F.C. and S.T. Buckland. 2004. Covariate models for the detection function. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R. Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
See Also
flnl
, summary.ds
, coef.ds
,
plot.ds
,gof.ds
Examples
# ddf.ds is called when ddf is called with method="ds"
data(book.tee.data)
region <- book.tee.data$book.tee.region
egdata <- book.tee.data$book.tee.dataframe
samples <- book.tee.data$book.tee.samples
obs <- book.tee.data$book.tee.obs
result <- ddf(dsmodel = ~mcds(key = "hn", formula = ~1),
data = egdata[egdata$observer==1, ], method = "ds",
meta.data = list(width = 4))
summary(result,se=TRUE)
plot(result,main="cds - observer 1")
print(dht(result,region,samples,obs,options=list(varflag=0,group=TRUE),
se=TRUE))
print(ddf.gof(result))
Goodness of fit tests for distance sampling models
Description
Generic function that computes chi-square goodness of fit test for detection
function models with binned data and Cramer-von Mises and Kolmogorov-Smirnov
(if ks=TRUE
)tests for exact distance data. By default a Q-Q plot is
generated for exact data (and can be suppressed using the qq=FALSE
argument).
Usage
ddf.gof(
model,
breaks = NULL,
nc = NULL,
qq = TRUE,
nboot = 100,
ks = FALSE,
...
)
Arguments
model |
model object |
breaks |
Cutpoints to use for binning data |
nc |
Number of distance classes |
qq |
Flag to indicate whether quantile-quantile plot is desired |
nboot |
number of replicates to use to calculate p-values for the Kolmogorov-Smirnov goodness of fit test statistics |
ks |
perform the Kolmogorov-Smirnov test (this involves many bootstraps so can take a while) |
... |
Graphics parameters to pass into qqplot function |
Details
Formal goodness of fit testing for detection function models using
Kolmogorov-Smirnov and Cramer-von Mises tests. Both tests are based on
looking at the quantile-quantile plot produced by qqplot.ddf
and deviations from the line x=y.
The Kolmogorov-Smirnov test asks the question "what's the largest vertical distance between a point and the y=x line?" It uses this distance as a statistic to test the null hypothesis that the samples (EDF and CDF in our case) are from the same distribution (and hence our model fits well). If the deviation between the y=x line and the points is too large we reject the null hypothesis and say the model doesn't have a good fit.
Rather than looking at the single biggest difference between the y=x line
and the points in the Q-Q plot, we might prefer to think about all the
differences between line and points, since there may be many smaller
differences that we want to take into account rather than looking for one
large deviation. Its null hypothesis is the same, but the statistic it uses
is the sum of the deviations from each of the point to the line.
Note that a bootstrap procedure is required for the Kolmogorov-Smirnov test
to ensure that the p-values from the procedure are correct as the we are
comparing the cumulative distribution function (CDF) and empirical
distribution function (EDF) and we have estimated the parameters of the
detection function. The nboot
parameter controls the number of
bootstraps to use. Set to 0
to avoid computing bootstraps (much
faster but with no Kolmogorov-Smirnov results, of course).
One can change the precision of printed values by using the print.ddf.gof
method's digits
argument.
Value
List of class ddf.gof
containing
chi-square |
Goodness of fit test statistic |
df |
Degrees of freedom associated with test statistic |
p-value |
Significance level of test statistic |
Author(s)
Jeff Laake
See Also
Mark-Recapture Distance Sampling (MRDS) IO - PI
Description
Mark-Recapture Distance Sampling (MRDS) Analysis of Independent Observer Configuration and Point Independence
Usage
## S3 method for class 'io'
ddf(
dsmodel,
mrmodel,
data,
method = NULL,
meta.data = list(),
control = list(),
call = ""
)
Arguments
dsmodel |
distance sampling model specification; model list with key function and scale formula if any |
mrmodel |
mark-recapture model specification; model list with formula and link |
data |
analysis dataframe |
method |
not used |
meta.data |
list containing settings controlling data structure |
control |
list containing settings controlling model fitting |
call |
original function call used to call |
Details
MRDS analysis based on point independence involves two separate and
independent analyses of the mark-recapture data and the distance sampling
data. For the independent observer configuration, the mark-recapture data
are analysed with a call to ddf.io.fi
(see likelihood eq 6.8
and 6.16 in Laake and Borchers 2004) to fit conditional distance sampling
detection functions to estimate p(0), detection probability at distance zero
for the independent observer team based on independence at zero (eq 6.22 in
Laake and Borchers 2004). Independently, the distance data, the union of the
observations from the independent observers, are used to fit a conventional
distance sampling (CDS) (likelihood eq 6.6) or multi-covariate distance
sampling (MCDS) (likelihood eq 6.14) model for the detection function, g(y),
such that g(0)=1. The detection function for the observer team is then
created as p(y)=p(0)*g(y) (eq 6.28 of Laake and Borchers 2004) from which
predictions are made. ddf.io
is not called directly by the user and
is called from ddf
with method="io"
.
For a complete description of each of the calling arguments, see
ddf
. The argument dataname
is the name of the
dataframe specified by the argument data
in ddf
. The arguments
dsmodel
, mrmodel
, control
and meta.data
are
defined the same as in ddf
.
Value
result: an io model object which is composed of io.fi and ds model objects
Author(s)
Jeff Laake
References
Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete detection at distance zero. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
See Also
ddf.io.fi
,
ddf.ds
,summary.io
,coef.io
,plot.io
,
gof.io
Mark-Recapture Distance Sampling (MRDS) IO - FI
Description
Mark-Recapture Analysis of Independent Observer Configuration with Full Independence
Usage
## S3 method for class 'io.fi'
ddf(
dsmodel = NULL,
mrmodel,
data,
method,
meta.data = list(),
control = list(),
call = ""
)
Arguments
dsmodel |
not used |
mrmodel |
mark-recapture model specification |
data |
analysis dataframe |
method |
analysis method; only needed if this function called from
|
meta.data |
list containing settings controlling data structure |
control |
list containing settings controlling model fitting |
call |
original function call used to call |
Details
The mark-recapture data derived from an independent observer distance sampling survey can be used to derive conditional detection functions (p_j(y)) for both observers (j=1,2). They are conditional detection functions because detection probability for observer j is based on seeing or not seeing observations made by observer 3-j. Thus, p_1(y) is estimated by p_1|2(y).
If detections by the observers are independent (full independence) then p_1(y)=p_1|2(y),p_2(y)=p_2|1(y) and for the union, full independence means that p(y)=p_1(y) + p_2(y) - p_1(y)*p_2(y) for each distance y. In fitting the detection functions the likelihood given by eq 6.8 and 6.16 in Laake and Borchers (2004) is used. That analysis does not require the usual distance sampling assumption that perpendicular distances are uniformly distributed based on line placement that is random relative to animal distribution. However, that assumption is used in computing predicted detection probability which is averaged based on a uniform distribution (see eq 6.11 of Laake and Borchers 2004).
For a complete description of each of the calling arguments, see
ddf
. The argument model
in this function is the same
as mrmodel
in ddf
. The argument dataname
is the name
of the dataframe specified by the argument data
in ddf
. The
arguments control
,meta.data
,and method
are defined the
same as in ddf
.
Value
result: an io.fi model object
Author(s)
Jeff Laake
References
Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete detection at distance zero. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
See Also
ddf.io
,summary.io.fi
,coef.io.fi
,
plot.io.fi
,gof.io.fi
,io.glm
Mark-Recapture Distance Sampling (MRDS) Removal - PI
Description
Mark-Recapture Distance Sampling (MRDS) Analysis of Removal Observer Configuration and Point Independence
Usage
## S3 method for class 'rem'
ddf(
dsmodel,
mrmodel,
data,
method = NULL,
meta.data = list(),
control = list(),
call = ""
)
Arguments
dsmodel |
distance sampling model specification; model list with key function and scale formula if any |
mrmodel |
mark-recapture model specification; model list with formula and link |
data |
analysis dataframe |
method |
not used |
meta.data |
list containing settings controlling data structure |
control |
list containing settings controlling model fitting |
call |
original function call used to call |
Details
MRDS analysis based on point independence involves two separate and
independent analyses of the mark-recapture data and the distance sampling
data. For the removal observer configuration, the mark-recapture data are
analysed with a call to ddf.rem.fi
(see Laake and Borchers
2004) to fit conditional distance sampling detection functions to estimate
p(0), detection probability at distance zero for the primary observer based
on independence at zero (eq 6.22 in Laake and Borchers 2004). Independently,
the distance data, the observations from the primary observer, are used to
fit a conventional distance sampling (CDS) (likelihood eq 6.6) or
multi-covariate distance sampling (MCDS) (likelihood eq 6.14) model for the
detection function, g(y), such that g(0)=1. The detection function for the
primary observer is then created as p(y)=p(0)*g(y) (eq 6.28 of Laake and
Borchers 2004) from which predictions are made. ddf.rem
is not called
directly by the user and is called from ddf
with
method="rem"
.
For a complete description of each of the calling arguments, see
ddf
. The argument data
is the dataframe specified by
the argument data
in ddf
. The arguments dsmodel
,
mrmodel
, control
and meta.data
are defined the same as
in ddf
.
Value
result: an rem model object which is composed of rem.fi and ds model objects
Author(s)
Jeff Laake
References
Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete detection at distance zero. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
See Also
Mark-Recapture Distance Sampling (MRDS) Removal - FI
Description
Mark-Recapture Distance Sampling (MRDS) Analysis of Removal Observer Configuration with Full Independence
Usage
## S3 method for class 'rem.fi'
ddf(
dsmodel = NULL,
mrmodel,
data,
method,
meta.data = list(),
control = list(),
call = ""
)
Arguments
dsmodel |
not used |
mrmodel |
mark-recapture model specification |
data |
analysis dataframe |
method |
analysis method; only needed if this function called from
|
meta.data |
list containing settings controlling data structure |
control |
list containing settings controlling model fitting |
call |
original function call used to call |
Details
The mark-recapture data derived from an removal observer distance sampling survey can only derive conditional detection functions (p_j(y)) for both observers (j=1) because technically it assumes that detection probability does not vary by occasion (observer in this case). It is a conditional detection function because detection probability for observer 1 is conditional on the observations seen by either of the observers. Thus, p_1(y) is estimated by p_1|2(y).
If detections by the observers are independent (full independence) then p_1(y)=p_1|2(y) and for the union, full independence means that p(y)=p_1(y) + p_2(y) - p_1(y)*p_2(y) for each distance y. In fitting the detection functions the likelihood from Laake and Borchers (2004) are used. That analysis does not require the usual distance sampling assumption that perpendicular distances are uniformly distributed based on line placement that is random relative to animal distribution. However, that assumption is used in computing predicted detection probability which is averaged based on a uniform distribution (see eq 6.11 of Laake and Borchers 2004).
For a complete description of each of the calling arguments, see
ddf
. The argument model
in this function is the same
as mrmodel
in ddf
. The argument dataname
is the name
of the dataframe specified by the argument data
in ddf
. The
arguments control
,meta.data
,and method
are defined the
same as in ddf
.
Value
result: an rem.fi model object
Author(s)
Jeff Laake
References
Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete detection at distance zero. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
See Also
Mark-Recapture Distance Sampling (MRDS) Trial Configuration - PI
Description
Mark-Recapture Distance Sampling (MRDS) Analysis of Trial Observer Configuration and Point Independence
Usage
## S3 method for class 'trial'
ddf(
dsmodel,
mrmodel,
data,
method = NULL,
meta.data = list(),
control = list(),
call = ""
)
Arguments
dsmodel |
distance sampling model specification; model list with key function and scale formula if any |
mrmodel |
mark-recapture model specification; model list with formula and link |
data |
analysis |
method |
not used |
meta.data |
list containing settings controlling data structure |
control |
list containing settings controlling model fitting |
call |
original function call used to call |
Details
MRDS analysis based on point independence involves two separate and
independent analyses of the mark-recapture data and the distance sampling
data. For the trial configuration, the mark-recapture data are analysed
with a call to ddf.trial.fi
(see likelihood eq 6.12 and 6.17
in Laake and Borchers 2004) to fit a conditional distance sampling detection
function for observer 1 based on trials (observations) from observer 2 to
estimate p_1(0), detection probability at distance zero for observer 1.
Independently, the distance data from observer 1 are used to fit a
conventional distance sampling (CDS) (likelihood eq 6.6) or multi-covariate
distance sampling (MCDS) (likelihood eq 6.14) model for the detection
function, g(y), such that g(0)=1. The detection function for observer 1 is
then created as p_1(y)=p_1(0)*g(y) (eq 6.28 of Laake and Borchers 2004) from
which predictions are made. ddf.trial
is not called directly by the
user and is called from ddf
with method="trial"
.
For a complete description of each of the calling arguments, see
ddf
. The argument dataname
is the name of the
dataframe specified by the argument data
in ddf
. The arguments
dsmodel
, mrmodel
, control
and meta.data
are
defined the same as in ddf
.
Value
result: a trial model object which is composed of trial.fi
and ds
model objects
Author(s)
Jeff Laake
References
Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete detection at distance zero. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
See Also
ddf.trial.fi
, ddf.ds
, summary.trial
, coef.trial
, plot.trial
, gof.trial
Mark-Recapture Analysis of Trial Configuration - FI
Description
Mark-Recapture Analysis of Trial Observer Configuration with Full Independence
Usage
## S3 method for class 'trial.fi'
ddf(
dsmodel = NULL,
mrmodel,
data,
method,
meta.data = list(),
control = list(),
call = ""
)
Arguments
dsmodel |
not used |
mrmodel |
mark-recapture model specification |
data |
analysis dataframe |
method |
analysis method; only needed if this function called from
|
meta.data |
list containing settings controlling data structure |
control |
list containing settings controlling model fitting |
call |
original function call used to call |
Details
The mark-recapture data derived from a trial observer distance sampling survey can be used to derive a conditional detection function (p_1(y)) for observer 1 based on trials (observations) from observer 2. It is a conditional detection function because detection probability for observer 1 is based on seeing or not seeing observations made by observer 2. Thus, p_1(y) is estimated by p_1|2(y). If detections by the observers are independent (full independence) then p_1(y)=p_1|2(y) for each distance y. In fitting the detection functions the likelihood given by eq 6.12 or 6.17 in Laake and Borchers (2004) is used. That analysis does not require the usual distance sampling assumption that perpendicular distances are uniformly distributed based on line placement that is random relative to animal distribution. However, that assumption is used in computing predicted detection probability which is averaged based on a uniform distribution (see eq 6.13 of Laake and Borchers 2004).
For a complete description of each of the calling arguments, see
ddf
. The argument model
in this function is the same
as mrmodel
in ddf
. The argument dataname
is the name
of the dataframe specified by the argument data
in ddf
. The
arguments control
,meta.data
,and method
are defined the
same as in ddf
.
Value
result: a trial.fi model object
Author(s)
Jeff Laake
References
Laake, J.L. and D.L. Borchers. 2004. Methods for incomplete detection at distance zero. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
See Also
ddf.trial
, summary.trial.fi
,
coef.trial.fi
, plot.trial.fi
,
gof.trial.fi
Observation detection tables
Description
Creates a series of tables for dual observer data that shows the number missed and detected for each observer within defined distance classes.
Usage
det.tables(model, nc = NULL, breaks = NULL)
Arguments
model |
fitted model from |
nc |
number of equal-width bins for histogram |
breaks |
user define breakpoints |
Value
list object of class "det.tables"
Observer1 |
table for observer 1 |
Observer2 |
table for observer 2 |
Duplicates |
histogram counts for duplicates |
Pooled |
histogram counts for all observations by either observer |
Obs1_2 |
table for observer 1 within subset seen by observer 2 |
Obs2_1 |
table for observer 2 within subset seen by observer 1 |
Author(s)
Jeff Laake
Examples
data(book.tee.data)
region <- book.tee.data$book.tee.region
egdata <- book.tee.data$book.tee.dataframe
samples <- book.tee.data$book.tee.samples
obs <- book.tee.data$book.tee.obs
xx <- ddf(mrmodel=~glm(formula=~distance*observer),
dsmodel=~mcds(key="hn", formula=~sex),
data=egdata, method="io", meta.data=list(width=4))
tabs <- det.tables(xx, breaks=c(0, 0.5, 1, 2, 3, 4))
par(mfrow=c(2, 2))
plot(tabs, new=FALSE, which=c(1, 2, 5, 6))
Fit detection function using key-adjustment functions
Description
Fit detection function to observed distances using the key-adjustment
function approach. If adjustment functions are included it will alternate
between fitting parameters of key and adjustment functions and then all
parameters much like the approach in the CDS and MCDS Distance FORTRAN code.
To do so it calls detfct.fit.opt
which uses the R optim function
which does not allow non-linear constraints so inclusion of adjustments does
allow the detection function to be non-monotone.
Usage
detfct.fit(ddfobj, optim.options, bounds, misc.options)
Arguments
ddfobj |
detection function object |
optim.options |
control options for optim |
bounds |
bounds for the parameters |
misc.options |
miscellaneous options |
Value
fitted detection function model object with the following list structure
par |
final parameter vector |
value |
final negative log likelihood value |
counts |
number of function evaluations |
convergence |
see codes in optim |
message |
string about convergence |
hessian |
hessian evaluated at final parameter values |
aux |
a list with 20 elements
|
Author(s)
Dave Miller; Jeff Laake
Fit detection function using key-adjustment functions
Description
Fit detection function to observed distances using the key-adjustment
function approach. If adjustment functions are included it will alternate
between fitting parameters of key and adjustment functions and then all
parameters much like the approach in the CDS and MCDS Distance FORTRAN code.
This function is called by the driver function detfct.fit
, it then
calls the relevant optimisation routine, slsqp
,
solnp
or optimx
.
Usage
detfct.fit.opt(ddfobj, optim.options, bounds, misc.options, fitting = "all")
Arguments
ddfobj |
detection function object |
optim.options |
control options for optim |
bounds |
bounds for the parameters |
misc.options |
miscellaneous options |
fitting |
character string with values "all","key","adjust" to determine which parameters are allowed to vary in the fitting |
Value
fitted detection function model object with the following list structure
par |
final parameter vector |
value |
final negative log likelihood value |
counts |
number of function evaluations |
convergence |
see codes in optim |
message |
string about convergence |
hessian |
hessian evaluated at final parameter values |
aux |
a list with 20 elements
|
Author(s)
Dave Miller; Jeff Laake; Lorenzo Milazzo; Felix Petersma
Density and abundance estimates and variances
Description
Compute density and abundance estimates and variances based on Horvitz-Thompson-like estimator.
Usage
dht(
model,
region.table,
sample.table,
obs.table = NULL,
subset = NULL,
se = TRUE,
options = list()
)
Arguments
model |
ddf model object |
region.table |
|
sample.table |
|
obs.table |
|
subset |
subset statement to create |
se |
if |
options |
a list of options that can be set, see " |
Details
Density and abundance within the sampled region is computed based on a
Horvitz-Thompson-like estimator for groups and individuals (if a clustered
population) and this is extrapolated to the entire survey region based on
any defined regional stratification. The variance is based on replicate
samples within any regional stratification. For clustered populations,
E(s)
and its standard error are also output.
Abundance is estimated with a Horvitz-Thompson-like estimator (Huggins 1989; Huggins 1991; Borchers et al. 1998; Borchers and Burnham 2004). The abundance in the
sampled region is simply 1/p_1 + 1/p_2 + ... + 1/p_n
where p_i
is the estimated detection probability for the i
th detection of
n
total observations. It is not strictly a Horvitz-Thompson estimator
because the p_i
are estimated and not known. For animals observed in
tight clusters, that estimator gives the abundance of groups
(group=TRUE
in options
) and the abundance of individuals is
estimated as s_1/p_1 + s_2/p_2 + ... + s_n/p_n
, where s_i
is the
size (e.g., number of animals in the group) of each observation
(group=FALSE
in options
).
Extrapolation and estimation of abundance to the entire survey region is
based on either a random sampling design or a stratified random sampling
design. Replicate samples (lines) are specified within regional strata
region.table
, if any. If there is no stratification,
region.table
should contain only a single record with the Area
for the entire survey region. The sample.table
is linked to the
region.table
with the Region.Label
. The obs.table
is
linked to the sample.table
with the Sample.Label
and
Region.Label
. Abundance can be restricted to a subset (e.g., for a
particular species) of the population by limiting the list the observations
in obs.table
to those in the desired subset. Alternatively, if
Sample.Label
and Region.Label
are in the data.frame
used to fit the model, then a subset
argument can be given in place
of the obs.table
. To use the subset
argument but include all
of the observations, use subset=1==1
to avoid creating an
obs.table
.
In extrapolating to the entire survey region it is important that the unit
measurements be consistent or converted for consistency. A conversion factor
can be specified with the convert.units
variable in the
options
list. The values of Area
in region.table
, must
be made consistent with the units for Effort
in sample.table
and the units of distance
in the data.frame
that was analyzed.
It is easiest to do if the units of Area
is the square of the units
of Effort
and then it is only necessary to convert the units of
distance
to the units of Effort
. For example, if Effort
was entered in kilometres and Area
in square kilometres and
distance
in metres then using
options=list(convert.units=0.001)
would convert metres to kilometres,
density would be expressed in square kilometres which would then be
consistent with units for Area
. However, they can all be in different
units as long as the appropriate composite value for convert.units
is
chosen. Abundance for a survey region can be expressed as: A*N/a
where A
is Area
for the survey region, N
is the
abundance in the covered (sampled) region, and a
is the area of the
sampled region and is in units of Effort * distance
. The sampled
region a
is multiplied by convert.units
, so it should be
chosen such that the result is in the same units of Area
. For
example, if Effort
was entered in kilometres, Area
in hectares
(100m x 100m) and distance
in metres, then using
options=list(convert.units=10)
will convert a
to units of
hectares (100 to convert metres to 100 metres for distance and .1 to convert
km to 100m units).
The argument options
is a list of variable=value
pairs that
set options for the analysis. All but two of these have been described above.
pdelta
should not need to be changed but was included for
completeness. It controls the precision of the first derivative calculation
for the delta method variance. If the option areas.supplied
is
TRUE
then the covered area is assumed to be supplied in the
CoveredArea
column of the sample data.frame
.
Value
list object of class dht
with elements:
clusters |
result list for object clusters |
individuals |
result list for individuals |
Expected.S |
|
The list structure of clusters and individuals are the same:
bysample |
|
summary |
|
N |
|
D |
|
average.p |
average detection probability estimate |
cormat |
correlation matrix of regional abundance/density estimates and total (if more than one region) |
vc |
list of 3: total variance-covariance matrix, detection function component of variance and encounter rate component of variance. For detection the v-c matrix and partial vector are returned |
Nhat.by.sample |
another summary of |
Uncertainty
If the argument se=TRUE
, standard errors for density and abundance is
computed. Coefficient of variation and log-normal confidence intervals are
constructed using a Satterthwaite approximation for degrees of freedom
(Buckland et al. 2001 p 90). The function dht.se
computes the
variance and interval estimates.
The variance has two components:
variation due to uncertainty from estimation of the detection function parameters;
variation in abundance due to random sample selection;
The first component (model parameter uncertainty) is computed using a delta
method estimate of variance (Huggins 1989; Huggins 1991; Borchers et al. 1998) in
which the first derivatives of the abundance estimator with respect to the
parameters in the detection function are computed numerically (see
DeltaMethod
).
The second component (encounter rate variance) can be computed in one of
several ways depending on the form taken for the encounter rate and the
estimator used. To begin with there three possible values for varflag
to calculate encounter rate:
-
0
uses a binomial variance for the number of observations (equation 13 of Borchers et al. 1998. This estimator is only useful if the sampled region is the survey region and the objects are not clustered; this situation will not occur very often; -
1
uses the encounter raten/L
(objects observed per unit transect) from Buckland et al. (2001) pg 78-79 (equation 3.78) for line transects (see also Fewster et al. 2009 estimator R2). This variance estimator is not appropriate ifsize
or a derivative ofsize
is used in the detection function; -
2
is the default and uses the encounter rate estimator\hat{N}/L
(estimated abundance per unit transect) suggested by Innes et al. (2002) and Marques and Buckland (2004)
In general if any covariates are used in the models, the default
varflag=2
is preferable as the estimated abundance will take into
account variability due to covariate effects. If the population is clustered
the mean group size and standard error is also reported.
For options 1
and 2
, it is then possible to choose one of the
estimator forms given in Fewster et al. (2009)
for line transects:
"R2"
, "R3"
, "R4"
, "S1"
, "S2"
,
"O1"
, "O2"
or "O3"
can be used by specifying ervar
in the list of options provided by the options
argument
(default "R2"
). For points, either the "P2"
or
"P3"
estimator can be selected (>=mrds 2.3.0 default "P2"
,
<= mrds 2.2.9 default "P3"
). See varn
and Fewster et al. (2009) for further details on these estimators.
dht
options
Several options are available to control calculations and output:
ci.width
Confidence interval width, expressed as a decimal between 0 and 1 (default
0.95
, giving a 95% CI)pdelta
delta value for computing numerical first derivatives (Default: 0.001)
varflag
0,1,2 (see "Uncertainty") (Default:
2
)convert.units
multiplier for width to convert to units of length (Default:
1
)ervar
encounter rate variance type (see "Uncertainty" and
type
argument ofvarn
). (Default:"R2"
for lines and"P2"
for points)
Author(s)
Jeff Laake, David L Miller
References
Borchers DL, Buckland ST, Goedhart PW, Clarke ED, Hedley SL (1998).
“Horvitz-Thompson Estimators for Double-Platform Line Transect Surveys.”
Biometrics, 54(4), 1221-1237.
doi:10.2307/253365.
Borchers DL, Burnham KP (2004).
“Advanced distance sampling: estimating abundance of biological population.”
In chapter General formulation for distance sampling, 10-11.
Oxford University Press.
Buckland ST, Anderson DR, Burnham KP, Laake JL, Borchers DL, Thomas L (2001).
Introduction to distance sampling: estimating abundance of biological populations.
Oxford university press.
Fewster RM, Buckland ST, Burnham KP, Borchers DL, Jupp PE, Laake JL, Thomas L (2009).
“Estimating the encounter rate variance in distance sampling.”
Biometrics, 65(1), 225-236.
Huggins RM (1989).
“On the statistical analysis of capture experiments.”
Biometrika, 76(1), 133-140.
doi:10.1093/biomet/76.1.133.
Huggins RM (1991).
“Some practical aspects of a conditional likelihood approach to capture experiments.”
Biometrics, 47(1), 725-732.
doi:10.1093/biomet/76.1.133.
Innes S, Heide-Jørgensen MP, Laake JL, Laidre KL, Cleator HJ, Richard P, Stewart RE (2002).
“Surveys of belugas and narwhals in the Canadian High Arctic in 1996.”
NAMMCO Scientific Publications, 4, 169-190.
Marques FFC, Buckland ST (2004).
“Advanced distance sampling.”
In chapter Covariate models for the detection function, 31-47.
Oxford University Press.
See Also
Computes abundance estimates at specified parameter values using Horvitz-Thompson-like estimator
Description
Computes abundance at specified values of parameters for numerical computation of first derivative with respect to parameters in detection function. An internal function called by DeltaMethod which is invoked by dht.se
Usage
dht.deriv(par, model, obs, samples, options = list())
Arguments
par |
detection function parameter values |
model |
ddf model object |
obs |
observations table |
samples |
samples table |
options |
list of options as specified in |
Value
vector of abundance estimates at values of parameters specified in par
Note
Internal function; not intended to be called by user
Author(s)
Jeff Laake
See Also
Variance and confidence intervals for density and abundance estimates
Description
Computes standard error, cv, and log-normal confidence intervals for abundance and density within each region (if any) and for the total of all the regions. It also produces the correlation matrix for regional and total estimates.
Usage
dht.se(
model,
region.table,
samples,
obs,
options,
numRegions,
estimate.table,
Nhat.by.sample
)
Arguments
model |
ddf model object |
region.table |
table of region values |
samples |
table of samples(replicates) |
obs |
table of observations |
options |
list of options that can be set (see |
numRegions |
number of regions |
estimate.table |
table of estimate values |
Nhat.by.sample |
estimated abundances by sample |
Details
The variance has two components:
variation due to uncertainty from estimation of the detection function parameters;
variation in abundance due to random sample selection.
The first component (model parameter uncertainty) is computed using a delta
method estimate of variance (Huggins 1989; Huggins 1991; Borchers et al. 1998) in
which the first derivatives of the abundance estimator with respect to the
parameters in the detection function are computed numerically (see
DeltaMethod
).
The second component (encounter rate variance) can be computed in one of
several ways depending on the form taken for the encounter rate and the
estimator used. To begin with there three possible values for varflag
to calculate encounter rate:
-
0
uses a negative binomial variance for the number of observations (equation 13 of Borchers et al. 1998). This estimator is only useful if the sampled region is the survey region and the objects are not clustered; this situation will not occur very often; -
1
uses the encounter raten/L
(objects observed per unit transect) from Buckland et al. (2001) pg 78-79 (equation 3.78) for line transects (see also Fewster et al. 2009 estimator R2). This variance estimator is not appropriate ifsize
or a derivative ofsize
is used in the detection function; -
2
is the default and uses the encounter rate estimator\hat{N}/L
(estimated abundance per unit transect) suggested by Innes et al. (2002) and Marques and Buckland (2004).
In general if any covariates are used in the models, the default
varflag=2
is preferable as the estimated abundance will take into
account variability due to covariate effects. If the population is clustered
the mean group size and standard error is also reported.
For options 1
and 2
, it is then possible to choose one of the
estimator forms given in Fewster et al. (2009). For line transects:
"R2"
, "R3"
, "R4"
, "S1"
, "S2"
,
"O1"
, "O2"
or "O3"
can be used by specifying ervar
in the list of options provided by the options
argument
(default "R2"
). For points, either the
"P2"
or "P3"
estimator can be selected (>=mrds 2.3.0
default "P2"
, <= mrds 2.2.9 default "P3"
). See
varn
and Fewster et al. (2009)
for further details on these estimators.
Exceptions to the above occur if there is only one sample in a stratum. In
this situation, varflag=0
continues to use a negative binomial
variance while the other options assume a Poisson variance (Var(x)=x
),
where when varflag=1
x is number of detections in the covered region and
when varflag=2
x is the abundance in the covered region. It also assumes
a known variance so z=1.96
is used for critical value. In all other cases
the degrees of freedom for the t
-distribution assumed for the
log(abundance) or log(density) is based on the Satterthwaite approximation
(Buckland et al. 2001 pg 90) for the degrees of freedom (df). The df are
weighted by the squared cv in combining the two sources of variation because
of the assumed log-normal distribution because the components are
multiplicative. For combining df for the sampling variance across regions
they are weighted by the variance because it is a sum across regions.
The coefficient of variation (CV) associated with the abundance estimates is calculated based on the following formula for the varflag
options 1 and 2:
varflag=1
CV(\hat{N}) = \sqrt{\left(\frac{\sqrt{n}}{n}\right)^2+CV(\hat{p})^2}
varflag=2
CV(\hat{N}) = \sqrt{\left(\frac{\sqrt{\hat{N}}}{\hat{N}}\right)^2+CV(\hat{p})^2}
where n is the number of observations, \hat{N}
is the estimated
abundance and \hat{p}
is the average probability of detection for
an animal in the covered area.
A non-zero correlation between regional estimates can occur from using a common detection function across regions. This is reflected in the correlation matrix of the regional and total estimates which is given in the value list. It is only needed if subtotals of regional estimates are needed.
Value
List with 2 elements:
estimate.table |
completed table with se, cv and confidence limits |
vc |
correlation matrix of estimates |
Note
This function is called by dht
and it is not expected that the
user will call this function directly but it is documented here for
completeness and for anyone expanding the code or using this function in
their own code.
Author(s)
Jeff Laake
References
Borchers DL, Buckland ST, Goedhart PW, Clarke ED, Hedley SL (1998).
“Horvitz-Thompson Estimators for Double-Platform Line Transect Surveys.”
Biometrics, 54(4), 1221-1237.
doi:10.2307/253365.
Buckland ST, Anderson DR, Burnham KP, Laake JL, Borchers DL, Thomas L (2001).
Introduction to distance sampling: estimating abundance of biological populations.
Oxford university press.
Fewster RM, Buckland ST, Burnham KP, Borchers DL, Jupp PE, Laake JL, Thomas L (2009).
“Estimating the encounter rate variance in distance sampling.”
Biometrics, 65(1), 225-236.
Huggins RM (1989).
“On the statistical analysis of capture experiments.”
Biometrika, 76(1), 133-140.
doi:10.1093/biomet/76.1.133.
Huggins RM (1991).
“Some practical aspects of a conditional likelihood approach to capture experiments.”
Biometrics, 47(1), 725-732.
doi:10.1093/biomet/76.1.133.
Innes S, Heide-Jørgensen MP, Laake JL, Laidre KL, Cleator HJ, Richard P, Stewart RE (2002).
“Surveys of belugas and narwhals in the Canadian High Arctic in 1996.”
NAMMCO Scientific Publications, 4, 169-190.
Marques FFC, Buckland ST (2004).
“Advanced distance sampling.”
In chapter Covariate models for the detection function, 31-47.
Oxford University Press.
See Also
Detection functions
Description
Various functions used to specify key and adjustment functions for detection functions.
Usage
detfct(distance, ddfobj, select=NULL, index=NULL, width=NULL,
standardize = TRUE, stdint=FALSE, left=0)
adjfct.cos(distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp=FALSE)
adjfct.poly(distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp=FALSE)
adjfct.herm(distance, scaling = 1, adj.order, adj.parm = NULL, adj.exp=FALSE)
scalevalue(key.scale, z)
keyfct.hn(distance, key.scale)
keyfct.hz(distance, key.scale, key.shape)
keyfct.gamma(distance, key.scale, key.shape)
fx(distance,ddfobj,select=NULL,index=NULL,width=NULL,
standardize=TRUE,stdint=FALSE, left=0)
fr(distance,ddfobj,select=NULL,index=NULL,width=NULL,
standardize=TRUE,stdint=FALSE)
distpdf(distance,ddfobj,select=NULL,index=NULL,width=NULL,standardize=TRUE,
stdint=FALSE,point=FALSE, left=0)
Arguments
distance |
vector of distances |
ddfobj |
distance sampling object (see |
select |
logical vector for selection of data values |
index |
specific data row index |
width |
(right) truncation width |
standardize |
logical used to decide whether to divide through by the function evaluated at 0 |
stdint |
logical used to decide whether integral is standardized |
point |
if TRUE, point counts; otherwise line transects |
left |
(left) truncation distance |
z |
design matrix for scale function |
key.scale |
vector of scale values |
key.shape |
vector of shape values |
adj.order |
vector of adjustment orders |
adj.parm |
vector of adjustment parameters |
scaling |
the scaling for the adjustment terms |
adj.exp |
if TRUE uses exp(adj) for adjustment to keep f(x)>0 |
Details
Multi-covariate detection functions (MCDS) are represented by a function
g(x,w,\theta)
where x is distance, z is a set of covariates and
\theta
is the parameter vector. The functions are defined such that
g(0,w,\theta)=1
and the covariates modify the scale (x/\sigma)
where a log link is used to relate \sigma
to the covariates,
\sigma=exp(\theta*w)
. A CDS function is obtained with a constant
\sigma
which is equivalent to an intercept design matrix, z.
detfct
will call either a gamma, half-normal, hazard-rate or uniform
function only returning the probability of detection at that distance. In
addition to the simple model above, we may specify adjustment terms to fit
the data better. These adjustments are either Cosine, Hermite and simple
polynomials. These are specified as arguments to detfct
, as detailed
below.
detfct
function which calls the others and assembles the final result
using either key(x)[1+series(x)] or
(key(x)[1+series(x)])/(key(0)[1+series(0)]) (depending on the value of
standardize
).
keyfct.*
functions calculate key function values and adjfct.*
calculate adjustment term values.
scalevalue
for either detection function it computes the scale with
the log link using the parameters and the covariate design matrix
fx
, fr
non-normalized probability density for line transects
and point counts respectively
Value
For detfct
, the value is a vector of detection probabilities
For keyfct.*
, vector of key function evaluations
For adjfct.*
, vector of adjustment series evaluations
For scalevalue
, vector of the scale parameters.
Author(s)
Jeff Laake, David L Miller
References
Marques, F. F. C., & Buckland, S. T. (2003). Incorporating covariates into standard line transect analyses. Biometrics, 59(4), 924-935.
Buckland, S. T., Anderson, D. R., Burnham, K. P., Laake, J. L., Borchers, D. L., & Thomas, L. (2004). Advanced Distance Sampling. Oxford University Press, Oxford, UK.
Becker, E. F. and P. X. Quang. 2009. A gamma-shaped detection function for line transect surveys with mark-recapture and covariate data. Journal of Agricultural Biological and Environmental Statistics 14:207-223.
See Also
Gradient of the non-normalised pdf of distances or the detection function for the distances.
Description
This function has been updated to match distpdf closely, so that it has the same flexibility. Effectively, it gives the gradient of distpdf or detfct, whichever one is specified.
Usage
distpdf.grad(
distance,
par.index,
ddfobj,
standardize = FALSE,
width,
point,
left = 0,
pdf.based = TRUE
)
Arguments
distance |
vector of distances |
par.index |
the index of the parameter of interest |
ddfobj |
the ddf object |
standardize |
whether the function should return the gradient of the standardized detection function g(x)/g(0) (TRUE), or simply of g(0) (FALSE). Currently only implemented for standardize = FALSE. |
width |
the truncation width |
point |
are the data from point transects (TRUE) or line transects (FALSE). |
left |
the left truncation (default 0) |
pdf.based |
is it the gradient of the non-normalised pdf (TRUE) or the detection function (FALSE)? Default is TRUE. |
Details
Various functions used to specify key and adjustment functions for gradients of detection functions.
So far, only developed for the half-normal, hazard-rate and uniform key functions in combination with cosine, simple polynomial and Hermite polynomial adjustments. It is only called by the gradient-based solver and should not be called by the general user.
distpdf.grad
will call either a half-normal, hazard-rate or uniform
function with adjustment terms to fit the data better, returning the
gradient of detection at that distance w.r.t. the parameters. The adjustments
are either cosine, Hermite or simple polynomial.
Value
the gradient of the non-normalised pdf or detection w.r.t. to
the parameter with parameter index par.index
.
Author(s)
Felix Petersma
Distance Sampling Functions
Description
Computes values of conditional and unconditional detection functions and probability density functions for for line/point data for single observer or dual observer in any of the 3 configurations (io,trial,rem).
Usage
ds.function(
model,
newdata = NULL,
obs = "All",
conditional = FALSE,
pdf = TRUE,
finebr
)
Arguments
model |
model object |
newdata |
dataframe at which to compute values; if NULL uses fitting data |
obs |
1 or 2 for observer 1 or 2, 3 for duplicates, "." for combined and "All" to return all of the values |
conditional |
if FALSE, computes p(x) based on distance detection function and if TRUE based on mr detection function |
pdf |
if FALSE, returns p(x) and if TRUE, returns p(x)*pi(x)/integral p(x)*pi(x) |
finebr |
fine break values over which line is averaged |
Details
Placeholder – Not functional —-
Value
List containing
xgrid |
grid of distance values |
values |
average detection fct values at the xgrid values |
Author(s)
Jeff Laake
Log-likelihood computation for distance sampling data
Description
For a specific set of parameter values, it computes and returns the negative
log-likelihood for the distance sampling likelihood for distances that are
unbinned, binned and a mixture of both. The function flnl
is the
function minimized using optim
from within
ddf.ds
.
Usage
flnl(fpar, ddfobj, misc.options, fitting = "all")
Arguments
fpar |
parameter values for detection function at which negative log-likelihood should be evaluated |
ddfobj |
distance sampling object |
misc.options |
a |
fitting |
character |
Details
Most of the computation is in flpt.lnl
in which the negative
log-likelihood is computed for each observation. flnl
is a wrapper
that optionally outputs intermediate results and sums the individual
log-likelihood values.
flnl
is the main routine that manipulates the parameters using
getpar
to handle fitting of key, adjustment or all of the
parameters. It then calls flpt.lnl
to do the actual computation of
the likelihood. The probability density function for point counts is
fr
and for line transects is fx
.
fx
=g(x)/mu (where g(x) is the detection function); whereas,
f(r)=r*g(r)/mu where mu in both cases is the normalizing constant. Both
functions are in source code file for link{detfct}
and are called from
distpdf
and the integral calculations are made with
integratepdf
.
Value
negative log-likelihood value at the parameter values specified in
fpar
Note
These are internal functions used by ddf.ds
to fit
distance sampling detection functions. It is not intended for the user to
invoke these functions but they are documented here for completeness.
Author(s)
Jeff Laake, David L Miller
See Also
(Negative) gradients of constraint function
Description
The function derives the gradients of the constraint function for all model parameters, in the following order: 1. Scale parameter (if part of key function) 2. Shape parameter (if part of key function) 3. Adjustment parameter 1 4. Adjustment parameter 2 5. Etc.
Usage
flnl.constr.grad.neg(pars, ddfobj, misc.options, fitting = "all")
Arguments
pars |
vector of parameter values for the detection function at which the gradients of the negative log-likelihood should be evaluated |
ddfobj |
distance sampling object |
misc.options |
a list object containing all additional information such
as the type of optimiser or the truncation width, and is created within
|
fitting |
character string with values "all", "key", "adjust" to determine which parameters are allowed to vary in the fitting. Not actually used. Defaults to "all". |
Details
The constraint function itself is formed of a specified number of non-linear
constraints, which defaults to 20 and is specified through
misc.options$mono.points
. The constraint function checks whether the
standardised detection function is 1) weakly/strictly monotonic at the
points and 2) non-negative at all the points. flnl.constr.grad
returns
the gradients of those constraints w.r.t. all parameters of the detection
function, i.e., 2 times mono.points
gradients for every parameter.
This function mostly follows the same structure as flnl.constr
in
detfct.fit.mono.R
.
Value
a matrix of gradients for all constraints (rows) w.r.t to every parameters (columns)
Gradient of the negative log likelihood function
Description
This function derives the gradients of the negative log likelihood function,
with respect to all parameters. It is based on the theory presented in
Introduction to Distance Sampling (2001) and Distance Sampling: Methods and
Applications (2015). It is not meant to be called by users of the mrds
and Distance
packages directly but rather by the gradient-based
solver. This solver is used when our distance sampling model is for
single-observer data coming from either line or point transect and only when
the detection function contains an adjustment series but no covariates. It is
implement for the following key + adjustment series combinations for the
detections function: the key function can be half-normal, hazard-rate or
uniform, and the adjustment series can be cosine, simple polynomial or
Hermite polynomial. Data can be either binned or exact, but a combination
of the two has not been implemented yet.
Usage
flnl.grad(pars, ddfobj, misc.options, fitting = "all")
Arguments
pars |
vector of parameter values for the detection function at which the gradients of the negative log-likelihood should be evaluated |
ddfobj |
distance sampling object |
misc.options |
a list object containing all additional information such
as the type of optimiser or the truncation width, and is created by
|
fitting |
character string with values "all", "key", "adjust" to determine which parameters are allowed to vary in the fitting. Not actually used. Defaults to "all". |
Value
The gradients of the negative log-likelihood w.r.t. the parameters
Author(s)
Felix Petersma
Hessian computation for fitted distance detection function model parameters
Description
Computes hessian to be used for variance-covariance matrix. The hessian is the outer product of the vector of first partials (see pg 62 of Buckland et al 2002).
Usage
flt.var(ddfobj, misc.options)
Arguments
ddfobj |
distance sampling object |
misc.options |
width-transect width (W); int.range-integration range for observations; showit-0 to 3 controls level of iteration printing; integral.numeric-if TRUE integral is computed numerically rather than analytically |
Value
variance-covariance matrix of parameters in the detection function
Note
This is an internal function used by ddf.ds
to fit
distance sampling detection functions. It is not intended for the user to
invoke this function but it is documented here for completeness.
Author(s)
Jeff Laake and David L Miller
References
Buckland et al. 2002
See Also
Compute value of p(0) using a logit formulation
Description
Compute value of p(0) using a logit formulation
Usage
g0(beta, z)
Arguments
beta |
logistic parameters |
z |
design matrix of covariate values |
Value
vector of p(0) values
Author(s)
Jeff Laake
Extraction and assignment of parameters to vector
Description
Extracts parameters of a particular type (scale,
shape, adjustments or g0 (p(0))) from the vector of parameters in
ddfobj
. All of the parameters are kept in a single vector for
optimization even though they have very different uses. assign.par
parses them from the vector based on a known structure and assigns them into
ddfobj
. getpar
extracts the requested types to be extracted
from ddfobj
.
Usage
getpar(ddfobj, fitting = "all", index = FALSE)
Arguments
ddfobj |
distance sampling object (see |
fitting |
character string which is either "all","key","adjust" which determines which parameters are retrieved |
index |
logical that determines whether parameters are returned (FALSE) or starting indices in parameter vector for scale, shape, adjustment parameters |
Value
index==FALSE, vector of parameters that were requested or index==TRUE, vector of 3 indices for shape, scale, adjustment
Note
Internal functions not intended to be called by user.
Author(s)
Jeff Laake
See Also
assign.par
Compute chi-square goodness-of-fit test for ds models
Description
Compute chi-square goodness-of-fit test for ds models
Usage
gof.ds(model, breaks = NULL, nc = NULL)
Arguments
model |
|
breaks |
distance cut points |
nc |
number of distance classes |
Value
list with chi-square value, df and p-value
Author(s)
Jeff Laake
See Also
ddf.gof
Integral of pdf of distances
Description
Computes the integral of distpdf
with scale=1 (stdint=TRUE
) or
specified scale (stdint=FALSE
).
Usage
gstdint(
x,
ddfobj,
index = NULL,
select = NULL,
width,
standardize = TRUE,
point = FALSE,
stdint = TRUE,
doeachint = FALSE,
left = left
)
Arguments
x |
lower, upper value for integration |
ddfobj |
distance detection function specification |
index |
specific data row index |
select |
logical vector for selection of data values |
width |
truncation width |
standardize |
if |
point |
logical to determine if point ( |
stdint |
if |
doeachint |
if |
left |
left truncation width |
Value
vector of integral values of detection function
Note
This is an internal function that is not intended to be invoked directly.
Author(s)
Jeff Laake and David L Miller
Plot histogram line
Description
Takes bar heights (height) and cutpoints (breaks), and constructs a line-only histogram from them using the function plot() (if lineonly==FALSE) or lines() (if lineonly==TRUE).
Usage
histline(
height,
breaks,
lineonly = FALSE,
outline = FALSE,
ylim = range(height),
xlab = "x",
ylab = "y",
det.plot = FALSE,
add = FALSE,
...
)
Arguments
height |
heights of histogram bars |
breaks |
cutpoints for x |
lineonly |
if TRUE, drawn with plot; otherwise with lines to allow addition of current plot |
outline |
if TRUE, only outline of histogram is plotted |
ylim |
limits for y axis |
xlab |
label for x axis |
ylab |
label for y axis |
det.plot |
if TRUE, plot is of detection so yaxis limited to unit interval |
add |
should this plot add to a previous window |
... |
Additional unspecified arguments for plot |
Value
None
Author(s)
Jeff Laake and David L Miller
Integrate a logistic detection function
Description
Integrates a logistic detection function; a separate function is used because in certain cases the integral can be solved analytically and also because the scale trick used with the half-normal and hazard rate doesn't work with the logistic.
Usage
integratedetfct.logistic(x, scalemodel, width, theta1, integral.numeric, w)
Arguments
x |
logistic design matrix values |
scalemodel |
scale model for logistic |
width |
transect width |
theta1 |
parameters for logistic |
integral.numeric |
if |
w |
design covariates |
Value
vector of integral values
Author(s)
Jeff Laake
Analytically integrate logistic detection function
Description
Computes integral (analytically) over x from 0 to width of a logistic detection function; For reference see integral #526 in CRC Std Math Table 24th ed
Usage
integratelogistic.analytic(x, models, beta, width)
Arguments
x |
matrix of data |
models |
list of model formulae |
beta |
parameters of logistic detection function |
width |
transect half-width |
Author(s)
Jeff Laake
Numerically integrate pdf of observed distances over specified ranges
Description
Computes integral of pdf of observed distances over x for each observation. The method of computation depends on argument switches set and the type of detection function.
Usage
integratepdf(
ddfobj,
select,
width,
int.range,
standardize = TRUE,
point = FALSE,
left = 0,
doeachint = FALSE
)
Arguments
ddfobj |
distance detection function specification |
select |
logical vector for selection of data values |
width |
truncation width |
int.range |
integration range matrix; vector is converted to matrix |
standardize |
logical used to decide whether to divide through by the function evaluated at 0 |
point |
logical to determine if point count ( |
left |
left truncation width |
doeachint |
calculate each integral numerically |
Value
vector of integral values - one for each observation
Author(s)
Jeff Laake & Dave Miller
Numerically integrates the non-normalised pdf or the detection function of observed distances over specified ranges.
Description
Gradient of the integral of the detection function, i.e., d beta/d theta in the documentation. This gradient of the integral is the same as the integral of the gradient, thanks to Leibniz integral rule.
Usage
integratepdf.grad(
par.index,
ddfobj,
int.range,
width,
standardize = FALSE,
point = FALSE,
left = 0,
pdf.based = TRUE
)
Arguments
par.index |
the index of the parameter of interest |
ddfobj |
the ddf object |
int.range |
vector with the lower and upper bound of the integration |
width |
the truncation width |
standardize |
TRUE if the non-standardised detection function should be integrated. Only implemented for standardize = FALSE, so users should not touch this argument and it can probably be removed. |
point |
are the data from point transects (TRUE) or line transects (FALSE). |
left |
the left truncation. Defaults to zero. |
pdf.based |
evaluate the non-normalised pdf or the detection function? Default is TRUE. |
Details
For internal use only – not to be called by mrds
or Distance
users directly.
Author(s)
Felix Petersma
Iterative offset GLM/GAM for fitting detection function
Description
Provides an iterative algorithm for finding the MLEs of detection (capture) probabilities for a two-occasion (double observer) mark-recapture experiment using standard algorithms GLM/GAM and an offset to compensate for conditioning on the set of observations. While the likelihood can be formulated and solved numerically, the use of GLM/GAM provides all of the available tools for fitting, predictions, plotting etc without any further development.
Usage
io.glm(
datavec,
fitformula,
eps = 1e-05,
iterlimit = 500,
GAM = FALSE,
gamplot = TRUE
)
Arguments
datavec |
dataframe |
fitformula |
logit link formula |
eps |
convergence criterion |
iterlimit |
maximum number of iterations allowed |
GAM |
uses GAM instead of GLM for fitting |
gamplot |
set to TRUE to get a gam plot object if |
Details
Note that currently the code in this function for GAMs has been commented
out until the remainder of the mrds package will work with GAMs. This is an
internal function that is used as by ddf.io.fi
to fit mark-recapture
models with 2 occasions. The argument mrmodel
is used for
fitformula
.
Value
list of class("ioglm","glm","lm") or class("ioglm","gam")
glmobj |
GLM or GAM object |
offsetvalue |
offsetvalues from iterative fit |
plotobj |
gam plot object (if GAM & gamplot==TRUE, else NULL) |
Author(s)
Jeff Laake, David Borchers, Charles Paxton
References
Buckland, S.T., J.M. breiwick, K.L. Cattanach, and J.L. Laake. 1993. Estimated population size of the California gray whale. Marine Mammal Science, 9:235-249.
Burnham, K.P., S.T. Buckland, J.L. Laake, D.L. Borchers, T.A. Marques, J.R.B. Bishop, and L. Thomas. 2004. Further topics in distance sampling. pp: 360-363. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
Collection of functions for logistic detection functions
Description
These functions are used to test whether a logistic detection function is a
linear function of distance (is.linear.logistic
) or is constant
(varies by distance but no other covariates) is.logistic.constant
).
Based on these tests, the most appropriate manner for integrating the
detection function with respect to distance is chosen. The integrals are
needed to estimate the average detection probability for a given set of
covariates.
Usage
is.linear.logistic(xmat, g0model, zdim, width)
Arguments
xmat |
data matrix |
g0model |
logit model |
zdim |
number of columns in design matrix |
width |
transect width |
Details
If the logit is linear in distance then the integral can be computed analytically. If the logit is constant or only varies by distance then only one integral needs to be computed rather than an integral for each observation.
Value
Logical TRUE if condition holds and FALSE otherwise
Author(s)
Jeff Laake
Is a logit model constant for all observations?
Description
Determines whether the specified logit model is constant for all observations. If it is constant then only one integral needs to be computed.
Usage
is.logistic.constant(xmat, g0model, width)
Arguments
xmat |
data |
g0model |
logit model |
width |
transect width |
Value
logical value
Author(s)
Jeff Laake
The gradient of the half-normal key function
Description
The key function contains one parameter, the scale. Current implementation assumes that scaled dist is x/scale, not x/width
Usage
keyfct.grad.hn(distance, key.scale)
Arguments
distance |
perpendicular distance vector |
key.scale |
vector of scale values |
Details
d key / d scale = exp(-y ^ 2 / (2 scale ^ 2)) * (y ^ 2 / scale ^ 3)
Value
vector of derivatives of the half-normal key function w.r.t. the scale parameter
The gradient of the hazard-rate key function
Description
The key function contains two parameters, the scale and the shape, and so the gradient is two-dimensional. Current implementation assumes that scaled dist is x/scale, not x/width
Usage
keyfct.grad.hz(distance, key.scale, key.shape, shape = FALSE)
Arguments
distance |
perpendicular distance vector |
key.scale |
vector of scale values |
key.shape |
vector of shape values |
shape |
is the gradient parameter the shape parameter? Defaults to FALSE |
Details
d key / d scale = (shape * exp(-(1/ (x/scale) ^ shape)) / ((x/scale) ^ shape ) * scale) d key / d shape = - ((log(x / scale) * exp(-(1/ (x/scale) ^ shape))) / (x/scale) ^ shape)
When distance = 0, the gradients are also zero. However, the equation below will result in NaN and (-)Inf due to operations such as log(0) or division by zero. We correct for this in line 33.
Value
matrix of derivatives of the hazard rate key function w.r.t. the scale parameter and the shape parameter.
Threshold key function
Description
Threshold key function
Usage
keyfct.th1(distance, key.scale, key.shape)
Arguments
distance |
perpendicular distance vector |
key.scale |
vector of scale values |
key.shape |
vector of shape values |
Value
vector of probabilities
Threshold key function
Description
Threshold key function
Usage
keyfct.th2(distance, key.scale, key.shape)
Arguments
distance |
perpendicular distance vector |
key.scale |
vector of scale values |
key.shape |
vector of shape values |
Value
vector of probabilities
Two-part normal key function
Description
The two-part normal detection function of Becker and Christ (2015). Either side of an estimated apex in the distance histogram has a half-normal distribution, with differing scale parameters. Covariates may be included but affect both sides of the function.
Usage
keyfct.tpn(distance, ddfobj)
Arguments
distance |
perpendicular distance vector |
ddfobj |
meta object containing parameters, design matrices etc |
Details
Two-part normal models have 2 important parameters:
The apex, which estimates the peak in the detection function (where g(x)=1). The log apex is reported in
summary
results, so taking the exponential of this value should give the peak in the plotted function (see examples).The parameter that controls the difference between the sides
.dummy_apex_side
, which is automatically added to the formula for a two-part normal model. One can add interactions with this variable as normal, but don't need to add the main effect as it will be automatically added.
Value
a vector of probabilities that the observation were detected given they were at the specified distance and assuming that g(mu)=1
Author(s)
Earl F Becker, David L Miller
References
Becker, E. F., & Christ, A. M. (2015). A Unimodal Model for Double Observer Distance Sampling Surveys. PLOS ONE, 10(8), e0136403. doi:10.1371/journal.pone.0136403
Black-capped vireo mark-recapture distance sampling analysis
Description
These data represent avian point count surveys conducted at 453 point sample survey locations on the 24,000 (approx) live-fire region of Fort Hood in central Texas. Surveys were conducted by independent double observers (2 per survey occasion) and as such we had a maximum of 3 paired survey histories, giving a maximum of 6 sample occasions (see MacKenzie et al. 2006, MacKenzie and Royle 2005, and Laake et al. 2011 for various sample survey design details). At each point, we surveyed for 5 minutes (technically broken into 3 time intervals of 2, 2, and 1 minutes; not used here) and we noted detections by each observer and collected distance to each observation within a set of distance bins (0-25, 25-50, 50-75, 75-100m) of the target species (Black-capped vireo's in this case) for each surveyor. Our primary focus was to use mark-recapture distance sampling methods to estimate density of Black-capped vireo's, and to estimate detection rates for the mark-recapture, distance, and composite model.
Format
The format is a data frame with the following covariate metrics.
- PointID
Unique identifier for each sample location; locations are the same for both species
- VisitNumber
Visit number to the point
- Species
Species designation, either Golden-cheeked warbler (GW) or Black-capped Vireo (BV)
- Distance
Distance measure, which is either NA (representing no detection), or the median of the binned detection distances
- PairNumber
ID value indicating which observers were paired for that sampling occasion
- Observer
Observer ID, either primary(1), or secondary (2)
- Detected
Detection of a bird, either 1 = detected, or 0 = not detected
- Date
Date of survey since 15 march 2011
- Pred
Predicted occupancy value for that survey hexagon based on Farrell et al. (2013)
- Category
Region.Label categorization, see
mrds
help file for details on data structure- Effort
Amount of survey effort at the point
- Day
Number of days since 15 March 2011
- ObjectID
Unique ID for each paired observations
Details
In addition to detailing the analysis used by Collier et al. (2013, In
Review), this example documents the use of mrds
for avian point count
surveys and shows how density models can be incorporated with occupancy
models to develop spatially explicit density surface maps. For those that
are interested, for the distance sampling portion of our analysis, we used
both conventional distance sampling (cds
) and multiple covariate
distance sampling (mcds
) with uniform and half-normal key functions.
For the mark-recapture portion of our analysis, we tended to use covariates
for distance (median bin width), observer, and date of survey (days since 15
March 2011).
We combined our mrds
density estimates via a Horvitz-Thompson styled
estimator with the resource selection function gradient developed in Farrell
et al. (2013) and estimated density on an ~3.14ha hexagonal grid across our
study area, which provided a density gradient for the Fort Hood military
installation. Because there was considerable data manipulation needed for
each analysis to structure the data appropriately for use in mrds
,
rather than wrap each analysis in a single function, we have provided both
the Golden-cheeked warbler and Black-capped vireo analyses in their full
detail. The primary differences you will see will be changes to model
structures and model outputs between the two species.
Author(s)
Bret Collier and Jeff Laake
References
Farrell, S.F., B.A. Collier, K.L. Skow, A.M. Long, A.J. Campomizzi, M.L. Morrison, B. Hays, and R.N. Wilkins. 2013. Using LiDAR-derived structural vegetation characteristics to develop high-resolution, small-scale, species distribution models for conservation planning. Ecosphere 43(3): 42. http://dx.doi.org/10.1890/ES12-000352.1
Laake, J.L., B.A. Collier, M.L. Morrison, and R.N. Wilkins. 2011. Point-based mark recapture distance sampling. Journal of Agricultural, Biological and Environmental Statistics 16: 389-408.
Collier, B.A., S.L. Farrell, K.L. Skow, A. M. Long, A.J. Campomizzi, K.B. Hays, J.L. Laake, M.L. Morrison, and R.N. Wilkins. 2013. Spatially explicit density of endangered avian species in a disturbed landscape. Auk, In Review.
Examples
## Not run:
data(lfbcvi)
xy=cut(lfbcvi$Pred, c(-0.0001, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1),
labels=c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"))
x=data.frame(lfbcvi, New=xy)
# Note that I scaled the individual covariate of day-helps with
# convergence issues
bird.data <- data.frame(object=x$ObjectID, observer=x$Observer,
detected=x$Detected, distance=x$Distance,
Region.Label=x$New, Sample.Label=x$PointID,
Day=(x$Day/max(x$Day)))
# make observer a factor variable
bird.data$observer=factor(bird.data$observer)
# Jeff Laake suggested this snippet to quickly create distance medians
# which adds bin information to the bird.data dataframe
bird.data$distbegin=0
bird.data$distend=100
bird.data$distend[bird.data$distance==12.5]=25
bird.data$distbegin[bird.data$distance==37.5]=25
bird.data$distend[bird.data$distance==37.5]=50
bird.data$distbegin[bird.data$distance==62.5]=50
bird.data$distend[bird.data$distance==62.5]=75
bird.data$distbegin[bird.data$distance==87.5]=75
bird.data$distend[bird.data$distance==87.5]=100
# Removed all survey points with distance=NA for a survey event;
# hence no observations for use in ddf() but needed later
bird.data=bird.data[complete.cases(bird.data),]
# Manipulations on full dataset for various data.frame creation for
# use in density estimation using dht()
#Samples dataframe
xx=x
x=data.frame(PointID=x$PointID, Species=x$Species,
Category=x$New, Effort=x$Effort)
x=x[!duplicated(x$PointID),]
point.num=table(x$Category)
samples=data.frame(PointID=x$PointID, Region.Label=x$Category,
Effort=x$Effort)
final.samples=data.frame(Sample.Label=samples$PointID,
Region.Label=samples$Region.Label,
Effort=samples$Effort)
#obs dataframe
obs=data.frame(ObjectID=xx$ObjectID, PointID=xx$PointID)
#used to get Region and Sample assigned to ObjectID
obs=merge(obs, samples, by=c("PointID", "PointID"))
obs=obs[!duplicated(obs$ObjectID),]
obs=data.frame(object=obs$ObjectID, Region.Label=obs$Region.Label,
Sample.Label=obs$PointID)
region.data=data.frame(Region.Label=c(1, 2, 3,4,5,6,7,8,9, 10),
Area=c(point.num[1]*3.14, point.num[2]*3.14,
point.num[3]*3.14, point.num[4]*3.14,
point.num[5]*3.14, point.num[6]*3.14,
point.num[7]*3.14, point.num[8]*3.14,
point.num[9]*3.14, point.num[10]*3.14))
# Candidate Models
BV1=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance),
data=bird.data,
method="io",
meta.data=list(binned=TRUE,point=TRUE,width=100,breaks=c(0,50,100)))
BV1FI=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE,point=TRUE,width=100,breaks=c(0,50,100)))
BV2=ddf(
dsmodel=~mcds(key="hr",formula=~1),
mrmodel=~glm(~distance),
data=bird.data,
method="io",
meta.data=list(binned=TRUE,point=TRUE,width=100,breaks=c(0,50,100)))
BV3=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance+observer),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV3FI=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance+observer),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV4=ddf(
dsmodel=~mcds(key="hr",formula=~1),
mrmodel=~glm(~distance+observer),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV5=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance*observer),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV5FI=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance*observer),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV6=ddf(
dsmodel=~mcds(key="hr",formula=~1),
mrmodel=~glm(~distance*observer),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV7=ddf(
dsmodel=~cds(key="hn",formula=~1),
mrmodel=~glm(~distance*Day),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV7FI=ddf(
dsmodel=~cds(key="hn",formula=~1),
mrmodel=~glm(~distance*Day),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV8=ddf(
dsmodel=~cds(key="hr",formula=~1),
mrmodel=~glm(~distance*Day),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV9=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance*observer*Day),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV9FI=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance*observer*Day),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
BV10=ddf(
dsmodel=~mcds(key="hr",formula=~1),
mrmodel=~glm(~distance*observer*Day),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
#BV.DS=ddf(
# dsmodel=~mcds(key="hn",formula=~1),
# data=bird.data,
# method="ds",
# meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
#AIC table building code.
AIC = c(BV1$criterion, BV1FI$criterion, BV2$criterion, BV3$criterion,
BV3FI$criterion, BV4$criterion, BV5$criterion, BV5FI$criterion,
BV6$criterion, BV7$criterion, BV7FI$criterion, BV8$criterion,
BV9$criterion, BV9FI$criterion, BV10$criterion)
#creates a set of row names for me to check my grep() call below
rn = c("BV1", "BV1FI", "BV2", "BV3", "BV3FI", "BV4", "BV5", "BV5FI",
"BV6", "BV7", "BV7FI", "BV8", "BV9", "BV9FI", "BV10")
#Number parameters
k = c(length(BV1$par), length(BV1FI$par), length(BV2$par),
length(BV3$par), length(BV3FI$par), length(BV4$par),
length(BV5$par),length(BV5FI$par), length(BV6$par),
length(BV7$par), length(BV7FI$par), length(BV8$par),
#build AIC table
AIC.table=data.frame(AIC = AIC, rn=rn, k=k, dAIC = abs(min(AIC)-AIC) ,
likg=exp(-.5*(abs(min(AIC)-AIC))))
#row.names(AIC.table)=grep("BV", ls(), value=TRUE)
AIC.table=AIC.table[with(AIC.table, order(-likg, -dAIC, AIC, k)),]
AIC.table=data.frame(AIC.table, wi=AIC.table$likg/sum(AIC.table$likg))
AIC.table
# Model average N_hat_covered estimates
# not very clean, but I wanted to show full process, need to use
# collect.models and model.table here later on
estimate <- c(BV1$Nhat, BV1FI$Nhat, BV2$Nhat, BV3$Nhat, BV3FI$Nhat,
BV4$Nhat, BV5$Nhat, BV5FI$Nhat, BV6$Nhat, BV7$Nhat,
BV7FI$Nhat, BV8$Nhat, BV9$Nhat, BV9FI$Nhat, BV10$Nhat)
AIC.values=AIC
# had to use str() to extract here as Nhat.se is calculated in
# mrds:::summary.io, not in ddf(), so it takes a bit
std.err <- c(summary(BV1)$Nhat.se, summary(BV1FI)$Nhat.se,
summary(BV2)$Nhat.se, summary(BV3)$Nhat.se,
summary(BV3FI)$Nhat.se, summary(BV4)$Nhat.se,
summary(BV5)$Nhat.se, summary(BV5FI)$Nhat.se,
summary(BV6)$Nhat.se, summary(BV7)$Nhat.se,
summary(BV7FI)$Nhat.se,summary(BV8)$Nhat.se,
summary(BV9)$Nhat.se, summary(BV9FI)$Nhat.se,
summary(BV10)$Nhat.se)
## End(Not run)
## Not run:
#Not Run
#requires RMark
library(RMark)
#uses model.average structure to model average real abundance estimates for
#covered area of the surveys
mmi.list=list(estimate=estimate, AIC=AIC.values, se=std.err)
model.average(mmi.list, revised=TRUE)
#Not Run
#Summary for the top 2 models
#summary(BV5, se=TRUE)
#summary(BV5FI, se=TRUE)
#Not Run
#Best Model
#best.model=AIC.table[1,]
#Not Run
#GOF for models
#ddf.gof(BV5, breaks=c(0, 25, 50, 75, 100))
#Not Run
#Density estimation across occupancy categories
#out.BV=dht(BV5, region.data, final.samples, obs, se=TRUE,
# options=list(convert.units=.01))
#Plot--Not Run
#Composite Detection Function
#plot(BV5, which=3, showpoints=FALSE, angle=0, density=0, col="black", lwd=3,
# main="Black-capped Vireo",xlab="Distance (m)", las=1, cex.axis=1.25,
# cex.lab=1.25)
## End(Not run)
Golden-cheeked warbler mark-recapture distance sampling analysis
Description
These data represent avian point count surveys conducted at 453 point sample survey locations on the 24,000 (approx) live-fire region of Fort Hood in central Texas. Surveys were conducted by independent double observers (2 per survey occasion) and as such we had a maximum of 3 paired survey histories, giving a maximum of 6 sample occasions (see MacKenzie et al. 2006, MacKenzie and Royle 2005, and Laake et al. 2011 for various sample survey design details). At each point, we surveyed for 5 minutes (technically broken into 3 time intervals of 2, 2, and 1 minutes; not used here) and we noted detections by each observer and collected distance to each observation within a set of distance bins (0-50, 50-100m; Laake et al. 2011) of the target species (Golden-cheeked warblers in this case) for each surveyor. Our primary focus was to use mark-recapture distance sampling methods to estimate density of Golden-cheeked warblers, and to estimate detection rates for the mark-recapture, distance, and composite model.
Format
The format is a data frame with the following covariate metrics.
- PointID
Unique identifier for each sample location; locations are the same for both species
- VisitNumber
Visit number to the point
- Species
Species designation, either Golden-cheeked warbler (GW) or Black-capped Vireo (BV)
- Distance
Distance measure, which is either NA (representing no detection), or the median of the binned detection distances
- PairNumber
ID value indicating which observers were paired for that sampling occasion
- Observer
Observer ID, either primary(1), or secondary (2)
- Detected
Detection of a bird, either 1 = detected, or 0 = not detected
- Date
Date of survey since 15 March 2011, numeric value
- Pred
Predicted occupancy value for that survey hexagon based on Farrell et al. (2013)
- Category
Region.Label categorization, see R package
mrds
help file for details on data structure- Effort
Amount of survey effort at the point
- Day
Number of days since 15 March 2011, numeric value
- ObjectID
Unique ID for each paired observations
Details
In addition to detailing the analysis used by Collier et al.
(2013, In Review), this example documents the use of mrds
for avian
point count surveys and shows how density models can be incorporated with
occupancy models to develop spatially explicit density surface maps. For
those that are interested, for the distance sampling portion of our
analysis, we used both conventional distance sampling (cds
) and
multiple covariate distance sampling (mcds
) with uniform and
half-normal key functions. For the mark-recapture portion of our analysis,
we tended to use covariates for distance (median bin width), observer, and
date of survey (days since 15 March 2011).
We combined our mrds
density estimates via a Horvitz-Thompson styled
estimator with the resource selection function gradient developed in Farrell
et al. (2013) and estimated density on an ~3.14ha hexagonal grid across our
study area, which provided a density gradient for Fort Hood. Because there
was considerable data manipulation needed for each analysis to structure the
data appropriately for use in mrds
, rather than wrap each analysis in
a single function, we have provided both the Golden-cheeked warbler and
Black-capped vireo analyses in their full detail. The primary differences
you will see will be changes to model structures and model outputs between
the two species.
Author(s)
Bret Collier and Jeff Laake
References
Farrell, S.F., B.A. Collier, K.L. Skow, A.M. Long, A.J. Campomizzi, M.L. Morrison, B. Hays, and R.N. Wilkins. 2013. Using LiDAR-derived structural vegetation characteristics to develop high-resolution, small-scale, species distribution models for conservation planning. Ecosphere 43(3): 42. http://dx.doi.org/10.1890/ES12-000352.1
Laake, J.L., B.A. Collier, M.L. Morrison, and R.N. Wilkins. 2011. Point-based mark recapture distance sampling. Journal of Agricultural, Biological and Environmental Statistics 16: 389-408.
Collier, B.A., S.L. Farrell, K.L. Skow, A.M. Long, A.J. Campomizzi, K.B. Hays, J.L. Laake, M.L. Morrison, and R.N. Wilkins. 2013. Spatially explicit density of endangered avian species in a disturbed landscape. Auk, In Review.
Examples
## Not run:
data(lfgcwa)
xy <- cut(lfgcwa$Pred, c(-0.0001, .1, .2, .3, .4, .5, .6, .7, .8, .9, 1),
labels=c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10"))
x <- data.frame(lfgcwa, New=xy)
# Note that I scaled the individual covariate of day-helps with
# convergence issues
bird.data <- data.frame(object=x$ObjectID, observer=x$Observer,
detected=x$Detected, distance=x$Distance,
Region.Label=x$New, Sample.Label=x$PointID,
Day=(x$Day/max(x$Day)))
# make observer a factor variable
bird.data$observer=factor(bird.data$observer)
# Jeff Laake suggested this snippet to quickly create distance medians
# which adds bin information to the \code{bird.data} dataframe
bird.data$distbegin=0
bird.data$distend=100
bird.data$distend[bird.data$distance==12.5]=50
bird.data$distbegin[bird.data$distance==37.5]=0
bird.data$distend[bird.data$distance==37.5]=50
bird.data$distbegin[bird.data$distance==62.5]=50
bird.data$distend[bird.data$distance==62.5]=100
bird.data$distbegin[bird.data$distance==87.5]=50
bird.data$distend[bird.data$distance==87.5]=100
# Removed all survey points with distance=NA for a survey event;
# hence no observations for use in \code{ddf()} but needed later
bird.data=bird.data[complete.cases(bird.data),]
# Manipulations on full dataset for various data.frame creation
# for use in density estimation using \code{dht()}
# Samples dataframe
xx <- x
x <- data.frame(PointID=x$PointID, Species=x$Species,
Category=x$New, Effort=x$Effort)
x <- x[!duplicated(x$PointID),]
point.num <- table(x$Category)
samples <- data.frame(PointID=x$PointID, Region.Label=x$Category,
Effort=x$Effort)
final.samples=data.frame(Sample.Label=samples$PointID,
Region.Label=samples$Region.Label,
Effort=samples$Effort)
# obs dataframe
obs <- data.frame(ObjectID=xx$ObjectID, PointID=xx$PointID)
# used to get Region and Sample assigned to ObjectID
obs <- merge(obs, samples, by=c("PointID", "PointID"))
obs <- obs[!duplicated(obs$ObjectID),]
obs <- data.frame(object=obs$ObjectID, Region.Label=obs$Region.Label,
Sample.Label=obs$PointID)
#Region.Label dataframe
region.data <- data.frame(Region.Label=c(1,2,3,4,5,6,7,8,9),
Area=c(point.num[1]*3.14,
point.num[2]*3.14,
point.num[3]*3.14,
point.num[4]*3.14,
point.num[5]*3.14,
point.num[6]*3.14,
point.num[7]*3.14,
point.num[8]*3.14,
point.num[9]*3.14))
# Candidate Models
GW1=ddf(
dsmodel=~cds(key="unif", adj.series="cos", adj.order=1,adj.scale="width"),
mrmodel=~glm(~distance),
data=bird.data,
method="io",
meta.data=list(binned=TRUE,point=TRUE,width=100,breaks=c(0,50,100)))
GW2=ddf(
dsmodel=~cds(key="unif", adj.series="cos", adj.order=1,adj.scale="width"),
mrmodel=~glm(~distance+observer),
data=bird.data,
method="io",
meta.data=list(binned=TRUE,point=TRUE,width=100,breaks=c(0,50,100)))
GW3=ddf(
dsmodel=~cds(key="unif", adj.series="cos", adj.order=1,adj.scale="width"),
mrmodel=~glm(~distance*observer),
data=bird.data,
method="io",
meta.data=list(binned=TRUE,point=TRUE,width=100,breaks=c(0,50,100)))
GW4=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance),
data=bird.data,
method="io",
meta.data=list(binned=TRUE,point=TRUE,width=100,breaks=c(0,50,100)))
GW4FI=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE,point=TRUE,width=100,breaks=c(0,50,100)))
GW5=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance+observer),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
GW5FI=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance+observer),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
GW6=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance*observer),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
GW6FI=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance*observer),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
GW7=ddf(
dsmodel=~cds(key="hn",formula=~1),
mrmodel=~glm(~distance*Day),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
GW7FI=ddf(
dsmodel=~cds(key="hn",formula=~1),
mrmodel=~glm(~distance*Day),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
GW8=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance*observer*Day),
data=bird.data,
method="io",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
GW8FI=ddf(
dsmodel=~mcds(key="hn",formula=~1),
mrmodel=~glm(~distance*observer*Day),
data=bird.data,
method="io.fi",
meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
#GWDS=ddf(
# dsmodel=~mcds(key="hn",formula=~1),
# data=bird.data,
# method="ds",
# meta.data=list(binned=TRUE, point=TRUE, width=100,breaks=c(0,50,100)))
#### GCWA Summary Metrics
#AIC table building code, not exactly elegant, but I did not
want to add more package dependencies
AIC = c(GW1$criterion, GW2$criterion, GW3$criterion, GW4$criterion,
GW4FI$criterion, GW5$criterion, GW5FI$criterion,
GW6$criterion, GW6FI$criterion, GW7$criterion, GW7FI$criterion,
GW8$criterion, GW8FI$criterion)
#creates a set of row names for me to check my grep() call below
rn <- c("GW1", "GW2", "GW3", "GW4", "GW4FI", "GW5", "GW5FI", "GW6",
"GW6FI", "GW7","GW7FI", "GW8", "GW8FI")
# number of parameters for each model
k <- c(length(GW1$par), length(GW2$par), length(GW3$par), length(GW4$par),
length(GW4FI$par), length(GW5$par), length(GW5FI$par),
length(GW6$par), length(GW6FI$par), length(GW7$par),
length(GW7FI$par), length(GW8$par), length(GW8FI$par))
# build AIC table and
AIC.table <- data.frame(AIC = AIC, rn=rn, k=k, dAIC = abs(min(AIC)-AIC),
likg = exp(-.5*(abs(min(AIC)-AIC))))
# row.names(AIC.table)=grep("GW", ls(), value=TRUE)
AIC.table <- AIC.table[with(AIC.table, order(-likg, -dAIC, AIC, k)),]
AIC.table <- data.frame(AIC.table, wi=AIC.table$likg/sum(AIC.table$likg))
AIC.table
# Model average N_hat_covered estimates
# not very clean, but I wanted to show full process, need to use
# collect.models and model.table here
estimate <- c(GW1$Nhat, GW2$Nhat, GW3$Nhat, GW4$Nhat, GW4FI$Nhat,
GW5$Nhat, GW5FI$Nhat, GW6$Nhat, GW6FI$Nhat, GW7$Nhat,
GW7FI$Nhat, GW8$Nhat, GW8FI$Nhat)
AIC.values <- AIC
# Nhat.se is calculated in mrds:::summary.io, not in ddf(), so
# it takes a bit to pull out
std.err <- c(summary(GW1)$Nhat.se, summary(GW2)$Nhat.se,
summary(GW3)$Nhat.se,summary(GW4)$Nhat.se,
summary(GW4FI)$Nhat.se, summary(GW5)$Nhat.se,
summary(GW5FI)$Nhat.se, summary(GW6)$Nhat.se,
summary(GW6FI)$Nhat.se, summary(GW7)$Nhat.se,
summary(GW7FI)$Nhat.se,summary(GW8)$Nhat.se,
summary(GW8FI)$Nhat.se)
## End(Not run)
## Not run:
#Not Run
#requires RMark
library(RMark)
#uses model.average structure to model average real abundance estimates for
#covered area of the surveys
mmi.list=list(estimate=estimate, AIC=AIC.values, se=std.err)
model.average(mmi.list, revised=TRUE)
#Not Run
#Best Model FI
#best.modelFI=AIC.table[1,]
#best.model
#Best Model PI
#best.modelPI=AIC.table[2,]
#best.modelPI
#Not Run
#summary(GW7FI, se=TRUE)
#summary(GW7, se=TRUE)
#Not Run
#GOF for models
#ddf.gof(GW7, breaks=c(0,50,100))
#Not Run
#Density estimation across occupancy categories
#out.GW=dht(GW7, region.data, final.samples, obs, se=TRUE,
options=list(convert.units=.01))
#Plots--Not Run
#Composite Detection Function examples
#plot(GW7, which=3, showpoints=FALSE, angle=0, density=0,
# col="black", lwd=3, main="Golden-cheeked Warbler",
# xlab="Distance (m)", las=1, cex.axis=1.25, cex.lab=1.25)
#Conditional Detection Function
#dd=expand.grid(distance=0:100,Day=(4:82)/82)
#dmat=model.matrix(~distance*Day,dd)
#dd$p=plogis(model.matrix(~distance*Day,dd)%*%coef(GW7$mr)$estimate)
#dd$Day=dd$Day*82
#with(dd[dd$Day==12,],plot(distance,p,ylim=c(0,1), las=1,
# ylab="Detection probability", xlab="Distance (m)",
# type="l",lty=1, lwd=3, bty="l", cex.axis=1.5, cex.lab=1.5))
#with(dd[dd$Day==65,],lines(distance,p,lty=2, lwd=3))
#ch=paste(bird.data$detected[bird.data$observer==1],
# bird.data$detected[bird.data$observer==2],
# sep="")
#tab=table(ch,cut(82*bird.data$Day[bird.data$observer==1],c(0,45,83)),
# cut(bird.data$distance[bird.data$observer==1],c(0,50,100)))
#tabmat=cbind(colMeans(rbind(tab[3,,1]/colSums(tab[2:3,,1],
# tab[3,,1]/colSums(tab[c(1,3),,1])))),
# colMeans(rbind(tab[3,,2]/colSums(tab[2:3,,2],
# tab[3,,2]/colSums(tab[c(1,3),,2])))))
#colnames(tabmat)=c("0-50","51-100")
#points(c(25,75),tabmat[1,],pch=1, cex=1.5)
#points(c(25,75),tabmat[2,],pch=2, cex=1.5)
# Another alternative plot using barplot instead of points
# (this is one in paper)
#ch=paste(bird.data$detected[bird.data$observer==1],
# bird.data$detected[bird.data$observer==2],
#sep="")
#tab=table(ch,cut(82*bird.data$Day[bird.data$observer==1],c(0,45,83)),
# cut(bird.data$distance[bird.data$observer==1],c(0,50,100)))
#tabmat=cbind(colMeans(rbind(tab[3,,1]/colSums(tab[2:3,,1],
# tab[3,,1]/colSums(tab[c(1,3),,1])))),
#colMeans(rbind(tab[3,,2]/colSums(tab[2:3,,2],
# tab[3,,2]/colSums(tab[c(1,3),,2])))))
#colnames(tabmat)=c("0-50","51-100")
#par(mfrow=c(2, 1), mai=c(1,1,1,1))
#with(dd[dd$Day==12,],
# plot(distance,p,ylim=c(0,1), las=1,
# ylab="Detection probability", xlab="",
# type="l",lty=1, lwd=4, bty="l", cex.axis=1.5, cex.lab=1.5))
#segments(0, 0, .0, tabmat[1,1], lwd=3)
#segments(0, tabmat[1,1], 50, tabmat[1,1], lwd=4)
#segments(50, tabmat[1,1], 50, 0, lwd=4)
#segments(50, tabmat[1,2], 100, tabmat[1,2], lwd=4)
#segments(0, tabmat[1,1], 50, tabmat[1,1], lwd=4)
#segments(100, tabmat[1,2], 100, 0, lwd=4)
#mtext("a",line=-1, at=90)
#with(dd[dd$Day==65,],
# plot(distance,p,ylim=c(0,1), las=1, ylab="Detection probability",
# xlab="Distance", type="l",lty=1,
# lwd=4, bty="l", cex.axis=1.5, cex.lab=1.5))
#segments(0, 0, .0, tabmat[2,1], lwd=4)
#segments(0, tabmat[2,1], 50, tabmat[2,1], lwd=4)
#segments(50, tabmat[2,1], 50, 0, lwd=4)
#segments(50, tabmat[2,2], 50, tabmat[2,1], lwd=4)
#segments(50, tabmat[2,2], 100, tabmat[2,2], lwd=4)
#segments(100, tabmat[2,2], 100, 0, lwd=4)
#mtext("b",line=-1, at=90)
## End(Not run)
log-likelihood value for a fitted detection function
Description
Extract the log-likelihood from a fitted detection function.
Usage
## S3 method for class 'ddf'
logLik(object, ...)
Arguments
object |
a fitted detection function model object |
... |
included for S3 completeness, but ignored |
Value
a numeric value giving the log-likelihood with two attributes:
"df"
the "degrees of freedom" for the model (number of parameters)
and "nobs"
the number of observations used to fit the model
Author(s)
David L Miller
Logistic as a function of covariates
Description
treats logistic as a function of covariates; for a given covariate combination it computes function at with those covariate values at a range of distances
Usage
logisticbyx(distance, x, models, beta, point)
Arguments
distance |
vector of distance values |
x |
covariate data |
models |
model list |
beta |
logistic parameters |
point |
|
Value
vector of probabilities
Author(s)
Jeff Laake
Logistic as a function of distance
Description
Treats logistic as a function of distance; for a given distance it computes function at all covariate values in data.
Usage
logisticbyz(x, distance, models, beta)
Arguments
x |
covariate data |
distance |
single distance value |
models |
model list |
beta |
logistic parameters |
Value
vector of probabilities
Author(s)
Jeff Laake
Logistic detection function
Description
Logistic detection function
Usage
logisticdetfct(distance, theta, w, std = FALSE)
Arguments
distance |
perpendicular distance vector |
theta |
scale parameters |
w |
scale covariate matrix |
std |
if TRUE uses scale=1 The routine returns a vector of probabilities that the observation were detected given they were at the specified distance and assuming that g(0)=1 (ie a standard line transect detection function). |
Logistic for duplicates as a function of covariates
Description
Treats logistic for duplicates as a function of covariate z; for a given z it computes the function at with those covariate values at a range of distances.
Usage
logisticdupbyx(distance, x1, x2, models, beta, point)
Arguments
distance |
vector of distance values |
x1 |
covariate data for fct 1 |
x2 |
covariate data for fct 2 |
models |
model list |
beta |
logistic parameters |
point |
|
Value
vector of probabilities
Author(s)
Jeff Laake
Logistic for duplicates as a function of covariates (fast)
Description
As logisticdupbyx
, but faster when distance is a covariate
(but no interactions with distance occur.
Usage
logisticdupbyx_fast(distance, x1, x2, models, beta, point, beta_distance)
Arguments
distance |
vector of distance values |
x1 |
linear predictor for 1, without distance |
x2 |
linear predictor for 2, without distance |
models |
model list |
beta |
logistic parameters |
point |
|
beta_distance |
parameter for distance |
Author(s)
David L Miller
Logit function
Description
Computes logit transformation.
Usage
logit(p)
Arguments
p |
probability |
Value
logit(p)
returns [log(p/(1-p)]
Author(s)
Jeff Laake
MCDS function definition
Description
Creates model formula list for multiple covariate distance sampling using
values supplied in call to ddf
Usage
mcds(
formula = NULL,
key = NULL,
adj.series = NULL,
adj.order = c(NULL),
adj.scale = "width",
adj.exp = FALSE,
shape.formula = ~1
)
Arguments
formula |
formula for scale function |
key |
string identifying key function (currently either "hn" (half-normal),"hr" (hazard-rate), "unif" (uniform) or "gamma" (gamma distribution) |
adj.series |
string identifying adjustment functions cos (Cosine), herm (Hermite polynomials), poly (simple polynomials) or NULL |
adj.order |
vector of order of adjustment terms to include |
adj.scale |
whether to scale the adjustment terms by "width" or "scale" |
adj.exp |
if TRUE uses exp(adj) for adjustment to keep f(x)>0 |
shape.formula |
formula for shape function |
Value
A formula list used to define the detection function model
fct |
string "mcds" |
key |
key function string |
adj.series |
adjustment function string |
adj.order |
adjustment function orders |
adj.scale |
adjustment function scale type |
formula |
formula for scale function |
shape.formula |
formula for shape function |
Author(s)
Jeff Laake; Dave Miller
Tips on optimisation issues in mrds
models
Description
Occasionally when fitting an 'mrds' model one can run into optimisation issues. In general such problems can be quite complex so these "quick fixes" may not work. If you come up against problems that are not fixed by these tips, or you feel the results are dubious please go ahead and contact the package authors.
Debug mode
One can obtain debug output at each stage of the optimisation using the
showit
option. This is set via control
, so adding
control=list(showit=3)
gives the highest level of debug output
(setting showit
to 1 or 2 gives less output).
Re-scaling covariates
Sometimes convergence issues in covariate (MCDS) models are caused by values
of the covariate being very large, so a rescaling of that covariate is then
necessary. Simply scaling by the standard deviation of the covariate can
help (e.g. dat$size.scaled <- dat$scale/sd(dat$scale)
for a covariate
size
, then including size.scaled
in the model instead of
size
).
It is important to note that one needs to use the original covariate (size) when computing Horvitz-Thompson estimates of population size if the group size is used in that estimate. i.e. use the unscaled size in the numerator of the H-T estimator.
Factor levels
By default R will set the base factor level to be the label which comes
first alphabetically. Sometimes this can be an issue when that factor level
corresponds to a subset of the data with very few observations. This can
lead to very large uncertainty estimates (CVs) for model parameters. One way
around this is to use relevel
to set the base level to a level
with more observations.
Initial values
Initial (or starting) values for the dsmodel can be set via the initial
element of the control
list. initial
is a list itself with
elements scale
, shape
and adjustment
, corresponding to
the associated parameters. If a model has covariates then the scale
or
shape
elements will be vectors with parameter initial values in the
same order as they are specific in the model formula (using showit
is
a good check they are in the correct order). Adjustment starting values are
in order of the order of that term (cosine order 2 is before cosine order 3
terms).
One way of obtaining starting values is to fit a simpler model first (say with fewer covariates or adjustments) and then use the starting values from this simpler model for the corresponding parameters.
Another alternative to obtain starting values is to fit the model (or some
submodel) using Distance for Windows. Note that Distance reports the scale
parameter (or intercept in a covariate model) on the exponential scale, so
one must log
this before supplying it to ddf
.
Bounds
One can change the upper and lower bounds for the dsmodel parameters. These specify the largest and smallest values individual parameters can be. By placing these constraints on the parameters, it is possible to "temper" the optimisation problem, making fitting possible.
Again, one uses the control
list, the elements upperbounds
and
lowerbounds
. In this case, each of upperbounds
and
lowerbounds
are vectors, which one can think of as each of the
vectors shape
, scale
and adjustment
from the "Initial
values" section above, concatenated in that order. If one does not occur
(e.g. no shape parameter) then it is simple omitted from the vector.
Conventional distance sampling optimizer choice
The key function plus adjustment approach of Conventional Distance Sampling (CDS) can sometimes run into issues because it is sensible to constrain the fitted detection function to be monotonic non-increasing (i.e., flat or going down) with increasing distance - finding the maximum of the constrained likelihood is more difficult than the same task without constraints.
There are several options within the 'ddf' control
argument that may help
if difficulties are encountered. These are documented in the ddf
manual page, and a few are mentioned below.
One potential strategy (as mentioned above) is to use better starting values for the
optimization. If mono.startvals
is set to TRUE
then the detection function is first fit without adjustments and the resulting
scale (and shape) estimates used as starting values in the model with adjustments.
For even finer control, the initial
option can be used as documented above.
Another potential thing to change is the constraint solver used. From 'mrds' v 3.0.0
a new constraint solver, 'slsqp', has been included as the default. This was found
to work better than the solver previously used ('solnp') but if needed this solver
can be specified using the mono.method
option of the control
argument of
'ddf'.
It is also possible to use the optimizer implemented in Distance for Windows by downloading
a separate binary - see the manual page on mcds_dot_exe
. If specified, this
will also be used for Multiple Covariate Distance Sampling (MCDS) analyses.
Author(s)
David L. Miller <dave@ninepointeightone.net>
Wrapper around nlminb
Description
This is a wrapper around nlminb to use scaling, as this is not available in
optimx
.
Usage
nlminb_wrapper(
par,
ll,
ugr = NULL,
lower = NULL,
upper = NULL,
mcontrol,
hess = NULL,
ddfobj,
data,
...
)
Arguments
par |
starting parameters |
ll |
log likelihood function |
ugr |
gradient function |
lower |
lower bounds on parameters |
upper |
upper bounds on parameters |
mcontrol |
control options |
hess |
hessian function |
ddfobj |
detection function specification object |
data |
the data |
... |
anything else to pass to |
Value
optimx
object
Author(s)
David L Miller, modified from optimx.run
by JC Nash, R
Varadhan, G Grothendieck.
Double-platform detection probability
Description
Computes detection probability for detection function computed from mark-recapture data with possibly different link functions.
Usage
p.det(dpformula, dplink, dppars, dpdata)
Arguments
dpformula |
formula for detection function |
dplink |
link function ("logit","loglog","cloglog") |
dppars |
parameter vector |
dpdata |
double platform data |
Value
vector of predicted detection probabilities
Author(s)
?????
Distribution of probabilities of detection
Description
Generate a table of frequencies of probability of detection from a detection function model. This is particularly useful when employing covariates, as it can indicate if there are detections with very small detection probabilities that can be unduly influential when calculating abundance estimates.
Usage
p.dist.table(object, bins = seq(0, 1, by = 0.1), proportion = FALSE)
p_dist_table(object, bins = seq(0, 1, by = 0.1), proportion = FALSE)
Arguments
object |
fitted detection function |
bins |
how the results should be binned |
proportion |
should proportions be returned as well as counts? |
Details
Because dht
uses a Horvitz-Thompson-like estimator, abundance
estimates can be sensitive to errors in the estimated probabilities. The
estimator is based on \sum 1/ \hat{P}_a(z_i)
, which means that the
sensitivity is greater for smaller detection probabilities. As a rough
guide, we recommend that the method be not used if more than say 5% of the
\hat{P}_a(z_i)
are less than 0.2, or if any are less than 0.1. If
these conditions are violated, the truncation distance w can be reduced.
This causes some loss of precision relative to standard distance sampling
without covariates.
Value
a data.frame
with probability bins, counts and (optionally)
proportions. The object has an attribute p_range
which contains the
range of estimated detection probabilities
Author(s)
David L Miller
References
Marques, F.F.C. and S.T. Buckland. 2004. Covariate models for the detection function. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R. Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
Examples
## Not run:
# try out the tee data
data(book.tee.data)
egdata <- book.tee.data$book.tee.dataframe
# fit model with covariates
result <- ddf(dsmodel = ~mcds(key = "hn", formula = ~sex+size),
data = egdata[egdata$observer==1, ], method = "ds",
meta.data = list(width = 4))
# print table
p.dist.table(result)
# with proportions
p.dist.table(result, proportion=TRUE)
## End(Not run)
Parse optimx results and present a nice object
Description
Take the resulting object from a call to optimx and make it into an object that mrds wants to talk to.
Usage
parse.optimx(lt, lnl.last, par.last)
Arguments
lt |
an optimx object |
lnl.last |
last value of the log likelihood |
par.last |
last value of the parameters |
Value
lt
object that can be used later on
Compute probability that a object was detected by at least one observer
Description
Computes probability that a object was detected by at least one observer
(pdot
or p_.) for a logistic detection function that contains
distance.
Usage
pdot.dsr.integrate.logistic(
right,
width,
beta,
x,
integral.numeric,
BT,
models,
GAM = FALSE,
rem = FALSE,
point = FALSE
)
Arguments
right |
either an integration range for binned data (vector of 2) or the rightmost value for integration (from 0 to right) |
width |
transect width |
beta |
parameters of logistic detection function |
x |
data matrix |
integral.numeric |
set to |
BT |
|
models |
list of models including |
GAM |
Not used at present. The idea was to be able to use a GAM for g(0) portion of detection function; should always be F |
rem |
only |
point |
|
Author(s)
Jeff Laake
Observation detection tables
Description
Plot the tables created by det.tables
. Produces a series of
tables for dual observer data that shows the number missed and detected for
each observer within defined distance classes.
Usage
## S3 method for class 'det.tables'
plot(
x,
which = 1:6,
angle = NULL,
density = NULL,
col1 = "white",
col2 = "lightgrey",
new = TRUE,
...
)
Arguments
x |
object returned by |
which |
items in x to plot (vector with values in 1:6) |
angle |
shading angle for hatching |
density |
shading density for hatching |
col1 |
plotting colour for total histogram bars. |
col2 |
plotting colour for subset histogram bars. |
new |
if |
... |
other graphical parameters, passed to plotting functions |
Details
Plots that are produced are as follows (controlled by the which
argument):
- 1
Detected by either observer/Detected by observer 1
- 2
Detected by either observer/Detected by observer 2
- 3
Seen by both observers
- 4
Seen by either observer
- 5
Detected by observer 2/Detected by observer 1 | 2
- 6
Detected by observer 1/Detected by observer 2 | 1
Value
Just plots.
Author(s)
Jeff Laake, David L Miller
Examples
data(book.tee.data)
region <- book.tee.data$book.tee.region
egdata <- book.tee.data$book.tee.dataframe
samples <- book.tee.data$book.tee.samples
obs <- book.tee.data$book.tee.obs
xx <- ddf(mrmodel=~glm(formula=~distance*observer),
dsmodel = ~mcds(key = "hn", formula = ~sex),
data = egdata, method = "io", meta.data = list(width = 4))
tabs <- det.tables(xx,breaks=c(0,.5,1,2,3,4))
par(mfrow=c(2,3))
plot(tabs,which=1:6,new=FALSE)
Plot fit of detection functions and histograms of data from distance sampling model
Description
Plots the fitted detection function(s) with a histogram of the observed distances to compare visually the fitted model and data.
Usage
## S3 method for class 'ds'
plot(
x,
which = 2,
breaks = NULL,
nc = NULL,
jitter.v = rep(0, 3),
showpoints = TRUE,
subset = NULL,
pl.col = "lightgrey",
pl.den = NULL,
pl.ang = NULL,
main = NULL,
pages = 0,
pdf = FALSE,
ylim = NULL,
xlab = "Distance",
ylab = NULL,
...
)
Arguments
x |
fitted model from | ||||
which |
index to specify which plots should be produced:
| ||||
breaks |
user defined breakpoints | ||||
nc |
number of equal width bins for histogram | ||||
jitter.v |
apply jitter to points by multiplying the fitted value by a
random draw from a normal distribution with mean 1 and sd | ||||
showpoints |
logical variable; if | ||||
subset |
subset of data to plot. | ||||
pl.col |
colour for histogram bars. | ||||
pl.den |
shading density for histogram bars. | ||||
pl.ang |
shading angle for histogram bars. | ||||
main |
plot title. | ||||
pages |
the number of pages over which to spread the plots. For
example, if | ||||
pdf |
plot the histogram of distances with the PDF of the probability of detection overlaid. Ignored (with warning) for line transect models. | ||||
ylim |
vertical axis limits. | ||||
xlab |
horizontal axis label (defaults to "Distance"). | ||||
ylab |
vertical axis label (default automatically set depending on plot type). | ||||
... |
other graphical parameters, passed to the plotting functions
( |
Details
The structure of the histogram can be controlled by the user-defined
arguments nc
or breaks
. The observation specific detection
probabilities along with the line representing the fitted average detection
probability.
It is not intended for the user to call plot.ds
but its arguments are
documented here. Instead the generic plot
command should be used and
it will call the appropriate function based on the class of the ddf
object.
Value
Just plots.
Author(s)
Jeff Laake, Jon Bishop, David Borchers, David L Miller
See Also
add_df_covar_line
Examples
# fit a model to the tee data
data(book.tee.data)
egdata <- book.tee.data$book.tee.dataframe
xx <- ddf(dsmodel=~mcds(key="hn", formula=~sex),
data=egdata[egdata$observer==1, ],
method="ds", meta.data=list(width=4))
# not showing predicted probabilities
plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), showpoints=FALSE)
# two subsets
plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), subset=sex==0)
plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), subset=sex==1)
# put both plots on one page
plot(xx, breaks=c(0, 0.5, 1, 2, 3, 4), pages=1, which=1:2)
Plot fit of detection functions and histograms of data from distance
sampling independent observer (io
) model
Description
Plots the fitted detection functions for a distance sampling model and histograms of the distances (for unconditional detection functions) or proportion of observations detected within distance intervals (for conditional detection functions) to compare visually the fitted model and data.
Usage
## S3 method for class 'io'
plot(
x,
which = 1:6,
breaks = NULL,
nc = NULL,
maintitle = "",
showlines = TRUE,
showpoints = TRUE,
ylim = c(0, 1),
angle = NULL,
density = NULL,
col = "lightgrey",
jitter = NULL,
divisions = 25,
pages = 0,
xlab = "Distance",
ylab = "Detection probability",
subtitle = TRUE,
...
)
Arguments
x |
fitted model from | ||||||||||||
which |
index to specify which plots should be produced.
Note that the order of which is ignored and plots are produced in the above order. | ||||||||||||
breaks |
user define breakpoints | ||||||||||||
nc |
number of equal-width bins for histogram | ||||||||||||
maintitle |
main title line for each plot | ||||||||||||
showlines |
logical variable; if TRUE a line representing the average detection probability is plotted | ||||||||||||
showpoints |
logical variable; if TRUE plots predicted value for each observation | ||||||||||||
ylim |
range of vertical axis; defaults to (0,1) | ||||||||||||
angle |
shading angle for histogram bars. | ||||||||||||
density |
shading density for histogram bars. | ||||||||||||
col |
colour for histogram bars. | ||||||||||||
jitter |
scaling option for plotting points. Jitter is applied to points by multiplying the fitted value by a random draw from a normal distribution with mean 1 and sd jitter. | ||||||||||||
divisions |
number of divisions for averaging line values; default = 25 | ||||||||||||
pages |
the number of pages over which to spread the plots. For
example, if | ||||||||||||
xlab |
label for x-axis | ||||||||||||
ylab |
label for y-axis | ||||||||||||
subtitle |
if TRUE, shows plot type as sub-title | ||||||||||||
... |
other graphical parameters, passed to the plotting functions
( |
Details
The structure of the histogram can be controlled by the user-defined
arguments nc
or breaks
. The observation specific detection
probabilities along with the line representing the fitted average detection
probability.
It is not intended for the user to call plot.io.fi
but its arguments
are documented here. Instead the generic plot
command should be used
and it will call the appropriate function based on the class of the
ddf
object.
Value
Just plots
Author(s)
Jeff Laake, Jon Bishop, David Borchers, David L Miller
Examples
library(mrds)
data(book.tee.data)
egdata <- book.tee.data$book.tee.dataframe
result.io <- ddf(dsmodel=~cds(key = "hn"), mrmodel=~glm(~distance),
data=egdata, method="io", meta.data=list(width=4))
# just plot everything
plot(result.io)
# Plot primary and secondary unconditional detection functions on one page
# and primary and secondary conditional detection functions on another
plot(result.io,which=c(1,2,5,6),pages=2)
Plot fit of detection functions and histograms of data from distance
sampling independent observer model with full independence (io.fi
)
Description
Plots the fitted detection functions for a distance sampling model and histograms of the distances (for unconditional detection functions) or proportion of observations detected within distance intervals (for conditional detection functions) to compare visually the fitted model and data.
Usage
## S3 method for class 'io.fi'
plot(
x,
which = 1:6,
breaks = NULL,
nc = NULL,
maintitle = "",
showlines = TRUE,
showpoints = TRUE,
ylim = c(0, 1),
angle = NULL,
density = NULL,
col = "lightgrey",
jitter = NULL,
divisions = 25,
pages = 0,
xlab = "Distance",
ylab = "Detection probability",
subtitle = TRUE,
...
)
Arguments
x |
fitted model from | ||||||||||||
which |
index to specify which plots should be produced.
Note that the order of which is ignored and plots are produced in the above order. | ||||||||||||
breaks |
user define breakpoints | ||||||||||||
nc |
number of equal-width bins for histogram | ||||||||||||
maintitle |
main title line for each plot | ||||||||||||
showlines |
logical variable; if TRUE a line representing the average detection probability is plotted | ||||||||||||
showpoints |
logical variable; if TRUE plots predicted value for each observation | ||||||||||||
ylim |
range of vertical axis; defaults to (0,1) | ||||||||||||
angle |
shading angle for histogram bars. | ||||||||||||
density |
shading density for histogram bars. | ||||||||||||
col |
colour for histogram bars. | ||||||||||||
jitter |
scaling option for plotting points. Jitter is applied to points by multiplying the fitted value by a random draw from a normal distribution with mean 1 and sd jitter. | ||||||||||||
divisions |
number of divisions for averaging line values; default = 25 | ||||||||||||
pages |
the number of pages over which to spread the plots. For
example, if | ||||||||||||
xlab |
label for x-axis | ||||||||||||
ylab |
label for y-axis | ||||||||||||
subtitle |
if TRUE, shows plot type as sub-title | ||||||||||||
... |
other graphical parameters, passed to the plotting functions
( |
Details
The structure of the histogram can be controlled by the user-defined
arguments nc
or breaks
. The observation specific detection
probabilities along with the line representing the fitted average detection
probability.
It is not intended for the user to call plot.io.fi
but its arguments
are documented here. Instead the generic plot
command should be used
and it will call the appropriate function based on the class of the
ddf
object.
Value
Just plots.
Author(s)
Jeff Laake, Jon Bishop, David Borchers, David L Miller
Examples
library(mrds)
data(book.tee.data)
egdata <- book.tee.data$book.tee.dataframe
result.io.fi <- ddf(mrmodel=~glm(~distance), data = egdata, method = "io.fi",
meta.data = list(width = 4))
# just plot everything
plot(result.io.fi)
# Plot primary and secondary unconditional detection functions on one page
# and primary and secondary conditional detection functions on another
plot(result.io.fi,which=c(1,2,5,6),pages=2)
Plot fit of detection functions and histograms of data from removal distance sampling model
Description
Plots the fitted detection functions for a distance sampling model and histograms of the distances (for unconditional detection functions) or proportion of observations detected within distance intervals (for conditional detection functions) to compare visually the fitted model and data.
Usage
## S3 method for class 'rem'
plot(
x,
which = 1:3,
breaks = NULL,
nc = NULL,
maintitle = "",
showlines = TRUE,
showpoints = TRUE,
ylim = c(0, 1),
angle = NULL,
density = NULL,
col = "lightgrey",
jitter = NULL,
divisions = 25,
pages = 0,
xlab = "Distance",
ylab = "Detection probability",
subtitle = TRUE,
...
)
Arguments
x |
fitted model from | ||||||
which |
index to specify which plots should be produced.
| ||||||
breaks |
user define breakpoints | ||||||
nc |
number of equal-width bins for histogram | ||||||
maintitle |
main title line for each plot | ||||||
showlines |
logical variable; if | ||||||
showpoints |
logical variable; if | ||||||
ylim |
range of vertical axis; defaults to (0,1) | ||||||
angle |
shading angle for histogram bars. | ||||||
density |
shading density for histogram bars. | ||||||
col |
colour for histogram bars. | ||||||
jitter |
scaling option for plotting points. Jitter is applied to points by multiplying the fitted value by a random draw from a normal distribution with mean 1 and sd jitter. | ||||||
divisions |
number of divisions for averaging line values; default = 25 | ||||||
pages |
the number of pages over which to spread the plots. For
example, if | ||||||
xlab |
label for x-axis | ||||||
ylab |
label for y-axis | ||||||
subtitle |
if | ||||||
... |
other graphical parameters, passed to the plotting functions
( |
Details
The structure of the histogram can be controlled by the user-defined
arguments nc
or breaks
. The observation specific detection
probabilities along with the line representing the fitted average detection
probability.
It is not intended for the user to call plot.rem
but its arguments
are documented here. Instead the generic plot
command should be used
and it will call the appropriate function based on the class of the
ddf
object.
Author(s)
Jeff Laake, Jon Bishop, David Borchers, David L Miller
Plot fit of detection functions and histograms of data from removal distance sampling model
Description
Plots the fitted detection functions for a distance sampling model and histograms of the distances (for unconditional detection functions) or proportion of observations detected within distance intervals (for conditional detection functions) to compare visually the fitted model and data.
Usage
## S3 method for class 'rem.fi'
plot(
x,
which = 1:3,
breaks = NULL,
nc = NULL,
maintitle = "",
showlines = TRUE,
showpoints = TRUE,
ylim = c(0, 1),
angle = NULL,
density = NULL,
col = "lightgrey",
jitter = NULL,
divisions = 25,
pages = 0,
xlab = "Distance",
ylab = "Detection probability",
subtitle = TRUE,
...
)
Arguments
x |
fitted model from | ||||||
which |
index to specify which plots should be produced.
| ||||||
breaks |
user defined breakpoints | ||||||
nc |
number of equal-width bins for histogram | ||||||
maintitle |
main title line for each plot | ||||||
showlines |
logical variable; if | ||||||
showpoints |
logical variable; if | ||||||
ylim |
range of vertical axis; defaults to (0,1) | ||||||
angle |
shading angle for histogram bars. | ||||||
density |
shading density for histogram bars. | ||||||
col |
colour for histogram bars. | ||||||
jitter |
scaling option for plotting points. Jitter is applied to points by multiplying the fitted value by a random draw from a normal distribution with mean 1 and sd jitter | ||||||
divisions |
number of divisions for averaging line values; default = 25 | ||||||
pages |
the number of pages over which to spread the plots. For
example, if | ||||||
xlab |
label for x-axis | ||||||
ylab |
label for y-axis | ||||||
subtitle |
if | ||||||
... |
other graphical parameters, passed to the plotting functions
( |
Details
The structure of the histogram can be controlled by the user-defined
arguments nc
or breaks
. The observation specific detection
probabilities along with the line representing the fitted average detection
probability.
It is not intended for the user to call plot.rem.fi
but its arguments
are documented here. Instead the generic plot
command should be used
and it will call the appropriate function based on the class of the
ddf
object.
Author(s)
Jeff Laake, Jon Bishop, David Borchers, David L Miller
Plot fit of detection functions and histograms of data from distance sampling trial observer model
Description
Plots the fitted detection functions for a distance sampling model and histograms of the distances (for unconditional detection functions) or proportion of observations detected within distance intervals (for conditional detection functions) to compare visually the fitted model and data.
Usage
## S3 method for class 'trial'
plot(
x,
which = 1:2,
breaks = NULL,
nc = NULL,
maintitle = "",
showlines = TRUE,
showpoints = TRUE,
ylim = c(0, 1),
angle = NULL,
density = NULL,
col = "lightgrey",
jitter = NULL,
divisions = 25,
pages = 0,
xlab = "Distance",
ylab = "Detection probability",
subtitle = TRUE,
...
)
Arguments
x |
fitted model from | ||||
which |
index to specify which plots should be produced.
| ||||
breaks |
user define breakpoints | ||||
nc |
number of equal-width bins for histogram | ||||
maintitle |
main title line for each plot | ||||
showlines |
logical variable; if | ||||
showpoints |
logical variable; if | ||||
ylim |
range of vertical axis; defaults to (0,1) | ||||
angle |
shading angle for histogram bars. | ||||
density |
shading density for histogram bars. | ||||
col |
colour for histogram bars. | ||||
jitter |
scaling option for plotting points. Jitter is applied to points by multiplying the fitted value by a random draw from a normal distribution with mean 1 and sd jitter. | ||||
divisions |
number of divisions for averaging line values; default = 25 | ||||
pages |
the number of pages over which to spread the plots. For
example, if | ||||
xlab |
label for x-axis | ||||
ylab |
label for y-axis | ||||
subtitle |
if | ||||
... |
other graphical parameters, passed to the plotting functions
( |
Details
The structure of the histogram can be controlled by the user-defined
arguments nc
or breaks
. The observation specific detection
probabilities along with the line representing the fitted average detection
probability.
It is not intended for the user to call plot.io.fi
but its arguments
are documented here. Instead the generic plot
command should be used
and it will call the appropriate function based on the class of the
ddf
object.
Author(s)
Jeff Laake, Jon Bishop, David Borchers
Plot fit of detection functions and histograms of data from distance sampling trial observer model
Description
Plots the fitted detection functions for a distance sampling model and histograms of the distances (for unconditional detection functions) or proportion of observations detected within distance intervals (for conditional detection functions) to compare visually the fitted model and data.
Usage
## S3 method for class 'trial.fi'
plot(
x,
which = 1:2,
breaks = NULL,
nc = NULL,
maintitle = "",
showlines = TRUE,
showpoints = TRUE,
ylim = c(0, 1),
angle = NULL,
density = NULL,
col = "lightgrey",
jitter = NULL,
divisions = 25,
pages = 0,
xlab = "Distance",
ylab = "Detection probability",
subtitle = TRUE,
...
)
Arguments
x |
fitted model from | ||||
which |
index to specify which plots should be produced.
| ||||
breaks |
user define breakpoints | ||||
nc |
number of equal-width bins for histogram | ||||
maintitle |
main title line for each plot | ||||
showlines |
logical variable; if | ||||
showpoints |
logical variable; if | ||||
ylim |
range of vertical axis; defaults to (0,1) | ||||
angle |
shading angle for histogram bars. | ||||
density |
shading density for histogram bars. | ||||
col |
colour for histogram bars. | ||||
jitter |
scaling option for plotting points. Jitter is applied to points by multiplying the fitted value by a random draw from a normal distribution with mean 1 and sd jitter. | ||||
divisions |
number of divisions for averaging line values; default = 25 | ||||
pages |
the number of pages over which to spread the plots. For
example, if | ||||
xlab |
label for x-axis | ||||
ylab |
label for y-axis | ||||
subtitle |
if TRUE, shows plot type as sub-title | ||||
... |
other graphical parameters, passed to the plotting functions
( |
Details
The structure of the histogram can be controlled by the user-defined
arguments nc
or breaks
. The observation specific detection
probabilities along with the line representing the fitted average detection
probability.
It is not intended for the user to call plot.io.fi
but its arguments
are documented here. Instead the generic plot
command should be used
and it will call the appropriate function based on the class of the
ddf
object.
Author(s)
Jeff Laake, Jon Bishop, David Borchers
Plot conditional detection function from distance sampling model
Description
Plot proportion of observations detected within distance intervals (for
conditional detection functions) to compare visually the fitted model and
data. Internal function called by plot
methods.
Usage
plot_cond(
obs,
xmat,
gxvalues,
model,
nc,
breaks,
finebr,
showpoints,
showlines,
maintitle,
ylim,
angle = -45,
density = 20,
col = "black",
jitter = NULL,
xlab = "Distance",
ylab = "Detection probability",
subtitle = TRUE,
...
)
Arguments
obs |
observer code |
xmat |
processed data |
gxvalues |
detection function values for each observation |
model |
fitted model from |
nc |
number of equal-width bins for histogram |
breaks |
user define breakpoints |
finebr |
fine break values over which line is averaged |
showpoints |
logical variable; if |
showlines |
logical variable; if |
maintitle |
main title line for each plot |
ylim |
range of y axis (default |
angle |
shading angle for hatching |
density |
shading density for hatching |
col |
plotting colour |
jitter |
scaling option for plotting points. Jitter is applied to points by multiplying the fitted value by a random draw from a normal distribution with mean 1 and sd jitter. |
xlab |
label for x-axis |
ylab |
label for y-axis |
subtitle |
if TRUE, shows plot type as sub-title |
... |
other graphical parameters, passed to the plotting functions
( |
Author(s)
Jeff Laake, Jon Bishop, David Borchers
Layout for plot methods in mrds
Description
This function does the paging, using devAskNewPage()
. This means we
can just call plots and R will make the prompt for us
Warning, this function has side effects! It modifies devAskNewPage
!
Usage
plot_layout(which, pages)
Arguments
which |
which plots are to be created |
pages |
number of pages to span the plots across |
Details
Code is stolen and modified from plot.R
in mgcv
by Simon Wood
Author(s)
David L. Miller, based on code by Simon N. Wood
Plot unconditional detection function from distance sampling model
Description
Plots unconditional detection function for observer=obs observations
overlays histogram, average detection function and values for individual
observations data. Internal function called by plot
methods.
Usage
plot_uncond(
model,
obs,
xmat,
gxvalues,
nc,
finebr,
breaks,
showpoints,
showlines,
maintitle,
ylim,
return.lines = FALSE,
angle = -45,
density = 20,
col = "black",
jitter = NULL,
xlab = "Distance",
ylab = "Detection probability",
subtitle = TRUE,
...
)
Arguments
model |
fitted model from |
obs |
value of observer for plot |
xmat |
processed data |
gxvalues |
detection function values for each observation |
nc |
number of equal-width bins for histogram |
finebr |
fine break values over which line is averaged |
breaks |
user define breakpoints |
showpoints |
logical variable; if TRUE plots predicted value for each observation |
showlines |
logical variable; if TRUE plots average predicted value line |
maintitle |
main title line for each plot |
ylim |
range of y axis; defaults to (0,1) |
return.lines |
if TRUE, returns values for line |
angle |
shading angle for hatching |
density |
shading density for hatching |
col |
plotting colour |
jitter |
scaling option for plotting points. Jitter is applied to points by multiplying the fitted value by a random draw from a normal distribution with mean 1 and sd jitter. |
xlab |
label for x-axis |
ylab |
label for y-axis |
subtitle |
if TRUE, shows plot type as sub-title |
... |
other graphical parameters, passed to the plotting functions
( |
Value
if return.lines==TRUE
returns dataframe average.line
otherwise just plots
Author(s)
Jeff Laake, Jon Bishop, David Borchers
Predictions from mrds
models
Description
Predict detection probabilities (or effective strip widths/effective areas of detection) from a fitted distance sampling model using either the original data (i.e. "fitted" values) or using new data.
Usage
## S3 method for class 'ds'
predict(object, newdata=NULL, compute=FALSE,
int.range=NULL, esw=FALSE, se.fit=FALSE, ...)
## S3 method for class 'io.fi'
predict(object, newdata=NULL, compute=FALSE,
int.range=NULL, integrate=FALSE, ...)
## S3 method for class 'io'
predict(object, newdata=NULL, compute=FALSE,
int.range=NULL, ...)
## S3 method for class 'trial'
predict(object, newdata=NULL, compute=FALSE,
int.range=NULL, ...)
## S3 method for class 'trial.fi'
predict(object, newdata=NULL, compute=FALSE,
int.range=NULL, integrate=FALSE, ...)
## S3 method for class 'rem'
predict(object, newdata=NULL, compute=FALSE,
int.range=NULL, ...)
## S3 method for class 'rem.fi'
predict(object, newdata=NULL, compute=FALSE,
int.range=NULL, integrate=FALSE, ...)
Arguments
object |
|
newdata |
new |
compute |
if |
int.range |
integration range for variable range analysis; either vector or 2 column matrix. |
esw |
if |
se.fit |
for |
... |
for S3 consistency |
integrate |
for |
Details
The first 4 arguments are the same in each predict function. The latter 2
are specific to certain functions. For line transects, the effective strip
half-width (esw=TRUE
) is the integral of the fitted detection
function over either 0 to W or the specified int.range
. The
predicted detection probability is the average probability which is simply
the integral divided by the distance range. For point transect models,
esw=TRUE
calculates the effective area of detection (commonly
referred to as "nu", this is the integral of 2/width^2 * rg(r)
.
Fitted detection probabilities are stored in the model
object and
these are returned unless compute=TRUE
or newdata
is
specified. compute=TRUE
is used to estimate numerical derivatives for
use in delta method approximations to the variance.
For method="io.fi"
or method="trial.fi"
if
integrate=FALSE
, predict
returns the value of the conditional
detection probability and if integrate=TRUE
, it returns the average
conditional detection probability by integrating over x (distance) with
respect to a uniform distribution.
Note that the ordering of the returned results when no new data is supplied
(the "fitted" values) will not necessarily be the same as the data supplied
to ddf
, the data (and hence results from predict
) will
be sorted by object ID (object
) then observer ID (observer
).
Value
For all but the exceptions below, the value is a list with a single
element: fitted
, a vector of average detection probabilities or esw
values for each observation in the original data ornewdata
For predict.ds
, if se.fit=TRUE
there is an additional element
$se.fit
, which contains the standard errors of the probabilities of
detection or ESW.
For predict.io.fi
,predict.trial.fi
,predict.rem.fi
with
integrate=TRUE
, the value is a list with one element: fitted
,
which is a vector of integrated (average) detection probabilities for each
observation in the original data or newdata
.
For predict.io.fi
, predict.trial.fi
, or predict.rem.fi
with integrate=FALSE
, the value is a list with the following
elements:
fitted
p(y)
valuesp1
p_{1|2}(y)
, conditional detection probability for observer 1p2
p_{2|1}(y)
, conditional detection probability for observer 2fitted
p_.(y) = p_{1|2}(y) + p_{2|1}(y) - p_{1|2}(y) * p_{2|1}(y)
, conditional detection probability of being seen by either observer
Note
Each function is called by the generic function predict
for the
appropriate ddf
model object. They can be called directly by the
user, but it is typically safest to use predict
which calls the
appropriate function based on the type of model.
Author(s)
Jeff Laake, David L Miller
See Also
Simple pretty printer for distance sampling analyses
Description
Simply prints out summary of the model which was fitted. For more
detailed information see summary
.
Usage
## S3 method for class 'ddf'
print(x, ...)
Arguments
x |
a |
... |
not passed through, just for S3 compatibility. |
Author(s)
David L. Miller
Prints results of goodness of fit tests for detection functions
Description
Provides formatted output for results of goodness of fit tests: chi-square, Kolmogorv-Smirnov and Cramer-von Mises test as appropriate.
Usage
## S3 method for class 'ddf.gof'
print(x, digits = 3, ...)
Arguments
x |
result of call to |
digits |
number of digits to round chi-squared table values to |
... |
unused unspecified arguments for generic print |
Value
None
Author(s)
Jeff Laake
See Also
Print results of observer detection tables
Description
Provides formatted output for detection tables
Usage
## S3 method for class 'det.tables'
print(x, ...)
Arguments
x |
result of call to ddf |
... |
unused unspecified arguments for generic print |
Value
None
Author(s)
Jeff Laake
See Also
Prints density and abundance estimates
Description
Outputs summary statistics, abundance and density by region (if any) and optionally a correlation matrix if more than one region.
Usage
## S3 method for class 'dht'
print(x, cor = FALSE, bysample = FALSE, vcmatrices = FALSE, ...)
Arguments
x |
dht object that results from call to dht for a specific ddf object |
cor |
if TRUE outputs correlation matrix of estimates |
bysample |
if TRUE, prints results for each sample |
vcmatrices |
if TRUE, prints variance-covariance matrices |
... |
unspecified and unused arguments for S3 consistency |
Value
None
Author(s)
Jeff Laake
See Also
Print distribution of probabilities of detection
Description
Just a pretty printer for the table of probabilities of detection.
Usage
## S3 method for class 'p_dist_table'
print(x, digits = 2, ...)
Arguments
x |
output from |
digits |
number of significant digits to print |
... |
other arguments to be passed to |
Value
just prints the table and the range of ps
Author(s)
David L Miller
Print summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error. What is printed depends on the corresponding call to summary.
Usage
## S3 method for class 'summary.ds'
print(x, ...)
Arguments
x |
a summary of |
... |
unspecified and unused arguments for S3 consistency |
Author(s)
Jeff Laake
See Also
Print summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error. What is printed depends on the corresponding call to summary.
Usage
## S3 method for class 'summary.io'
print(x, ...)
Arguments
x |
a summary of |
... |
unspecified and unused arguments for S3 consistency |
Author(s)
Jeff Laake
See Also
Print summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error. What is printed depends on the corresponding call to summary.
Usage
## S3 method for class 'summary.io.fi'
print(x, ...)
Arguments
x |
a summary of |
... |
unspecified and unused arguments for S3 consistency |
Author(s)
Jeff Laake
See Also
Print summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error. What is printed depends on the corresponding call to summary.
Usage
## S3 method for class 'summary.rem'
print(x, ...)
Arguments
x |
a summary of |
... |
unspecified and unused arguments for S3 consistency |
Author(s)
Jeff Laake
See Also
Print summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error. What is printed depends on the corresponding call to summary.
Usage
## S3 method for class 'summary.rem.fi'
print(x, ...)
Arguments
x |
a summary of |
... |
unspecified and unused arguments for S3 consistency |
Author(s)
Jeff Laake
See Also
Print summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error. What is printed depends on the corresponding call to summary.
Usage
## S3 method for class 'summary.trial'
print(x, ...)
Arguments
x |
a summary of |
... |
unspecified and unused arguments for S3 consistency |
Author(s)
Jeff Laake
See Also
Print summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error. What is printed depends on the corresponding call to summary.
Usage
## S3 method for class 'summary.trial.fi'
print(x, ...)
Arguments
x |
a summary of |
... |
unspecified and unused arguments for S3 consistency |
Author(s)
Jeff Laake
See Also
Derivatives for variance of average p and average p(0) variance
Description
Used in call to DeltaMethod from prob.se to get first derivatives
Usage
prob.deriv(par, model, parfct, observer = NULL, fittedmodel = NULL)
Arguments
par |
detection function parameter values |
model |
ddf model object |
parfct |
function of detection probabilities; currently only average (over covariates) detection probability p integrated over distance or average (over covariates) detection probability at distance 0; p(0) |
observer |
1,2,3 for primary, secondary, or duplicates for average p(0); passed to fct |
fittedmodel |
full fitted ddf model when |
Details
Need to add equations here as I do not think they exist in any of the texts. These should probably be checked with simulation.
Value
Vector of values from fct at specified parameter values
Author(s)
Jeff Laake
See Also
prob.se
Average p and average p(0) variance
Description
Computes components of variance for average p=n/N and average p(0) with weights based on empirical covariate distribution, if it contains covariates.
Usage
prob.se(model, fct, vcov, observer = NULL, fittedmodel = NULL)
Arguments
model |
ddf model object |
fct |
function of detection probabilities; currently only average (over covariates) detection probability p integrated over distance or average (over covariates) detection probability at distance 0; p(0) |
vcov |
variance-covariance matrix of parameter estimates |
observer |
1,2,3 for primary, secondary, or duplicates for average p(0); passed to fct |
fittedmodel |
full fitted ddf model when |
Details
Need to add equations here as I do not think they exist in any of the texts. These should probably be checked with simulation.
Value
var |
variance |
partial |
partial derivatives of parameters with respect to fct |
covar |
covariance of n and average p or p(0) |
Author(s)
Jeff Laake
See Also
prob.deriv
Process data for fitting distance sampling detection function
Description
Sets up dataframe and does some basic error checking. Adds needed fields to
dataframe and to meta.data
.
Usage
process.data(data, meta.data = list(), check = TRUE)
Arguments
data |
dataframe object |
meta.data |
meta.data options; see |
check |
if |
Details
The function does a number of error checking tasks, creating fields and
adding to meta.data
including:
1) If check=TRUE
, check to make sure the record structure is okay for
mrds data. The number of primary records (observer=1) must equal the number
of secondary records (observer=2). Also, a field in the dataframe is created
timesseen
which counts the number of times an object was detected
0,1,2; if timesseen=0
then the record is tossed from the analysis.
Also if there are differences in the data (distance, size, covariates) for
observer 1 and 2 a warning is issued that the analysis may fail. The code
assumes these values are the same for both observers.
2) Based on the presence of fields distbegin
and distend
, a
determination is made of whether the data analysis should be based on binned
distances and a field binned
is created, which is TRUE
if the
distance for the observation is binned. By assigning for each observation
this allows an analysis of a mixture of binned and unbinned distances.
4) Data are restricted such that distances are not greater than width
and not less than left
if those values are specified in
meta.data
. If they are not specified then left
defaults to 0
and width
defaults to the largest distance measurement.
5) Determine if an integration range (int.begin
and int.end
has been specified for the observations. If it has, add the structure to
meta.data
. The integration range is typically used for aerial
surveys in which the altitude varies such that the strip width (left to
width) changes with a change in altitude.
6) Fields defined as factors are cleaned up such that any unused levels are eliminated.
7) If the restrictions placed on the data, eliminated all of the data, the function stops with an error message
Value
xmat |
processed |
meta.data |
meta.data list |
Author(s)
Jeff Laake
Pronghorn aerial survey data from Wyoming
Description
Detections of pronghorn from fixed-wing aerial surveys in Southeastern Wyoming using four angular bins defined by strut marks. Illustrates data where altitude above ground level (AGL) varies during the survey.
Format
A data frame with 660 observations on the following 5 variables.
- STRATUM
a numeric vector
- direction
a factor with levels
N
S
representing the survey direction- AGL
height above ground level
- Band
a factor with levels
A
B
C
D
which represent angular bands between breaks at 35.42,44.56,51.52,61.02,70.97 degrees. These angles were set based on selected distance bins based on the target AGL.- cluster
number of pronghorn in the observed cluster
Details
Each record is an observed cluster of pronghorn. The data provide the stratum for the observation, the direction of travel, the AGL at the time of the observation, the angular bin which contained the center of the pronghorn cluster(group), and the number of pronghorn in the group. The angular bins were defined by a combination of two window and five wing strut marks to define bin cutpoints for perpendicular ground distances of 0-65, 65-90, 90-115, 115-165 and 165-265 meters when the plane is 300' (91.4 meters) above ground level. The inner band is considered a blind region due to obstruction of view beneath the plane; thus th the line is offset 65 meters from underneath the plane.
Source
Data provided courtesy of Rich Guenzel of Wyoming Game and Fish.
References
Laake, J., R. J. Guenzel, J. L. Bengtson, P. Boveng, M. Cameron, and M. B. Hanson. 2008. Coping with variation in aerial survey protocol for line-transect sampling. Wildlife Research 35:289-298.
Single observer point count data example from Distance
Description
Single observer point count data example from Distance
Format
The format is 144 obs of 6 variables: distance: numeric distance from center observer: Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ... detected: numeric 0/1 object: sequential object number Sample.Label: point label Region.Label: single region label
Examples
data(ptdata.distance)
xx <- ddf(dsmodel = ~cds(key="hn", formula = ~1), data = ptdata.distance,
method = "ds", meta.data = list(point=TRUE))
summary(xx)
plot(xx,main="Distance point count data")
ddf.gof(xx)
Regions <- data.frame(Region.Label=1,Area=1)
Samples <- data.frame(Sample.Label=1:30,
Region.Label=rep(1,30),
Effort=rep(1,30))
print(dht(xx,sample.table=Samples,region.table=Regions))
Simulated dual observer point count data
Description
Simulated dual observer point count data with detection p(0)=0.8; hn sigma=30; w=100 for both observers with dependency y>0, gamma=0.1
Format
The format is 420 obs of 6 variables: distance: numeric distance from center observer: Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ... detected: numeric 0/1 person: Factor with 2 levels A,B pair: Factor with 2 levels "AB" BA" $ object : sequential object number
Examples
data(ptdata.dual)
xx <- ddf(mrmodel=~glm(formula=~distance),
dsmodel = ~cds(key="hn", formula = ~1),
data = ptdata.dual, method = "io", meta.data = list(point=TRUE))
summary(xx)
plot(xx,main="Simulated point count data")
Simulated removal observer point count data
Description
Simulated removal observer point count data with detection p(0)=0.8; hn sigma=30; w=100 for both observers with dependency y>0, gamma=0.1
Format
The format is 408 obs of 6 variables: distance: numeric distance from center observer: Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ... detected: numeric 0/1 person: Factor with 2 levels A,B pair: Factor with 2 levels "AB" BA" object: sequential object number
Examples
data(ptdata.removal)
xx <- ddf(mrmodel=~glm(formula=~distance),
dsmodel = ~cds(key="hn", formula = ~1),
data = ptdata.removal, method = "rem",
meta.data = list(point=TRUE))
summary(xx)
plot(xx,main="Simulated point count data")
Simulated single observer point count data
Description
Simulated single observer point count data with detection p(0)=1; hn sigma=30; w=100
Format
The format is 341 obs of 4 variables: ..$ distance: numeric distance from center $ observer: Factor w/ 2 levels "1","2": 1 2 1 2 1 2 1 2 1 2 ... ..$ detected: numeric 0/1 $ object : sequential object number
Examples
data(ptdata.single)
xx=ddf(dsmodel = ~cds(key="hn", formula = ~1), data = ptdata.single,
method = "ds", meta.data = list(point=TRUE))
summary(xx)
plot(xx,main="Simulated point count data")
Quantile-quantile plot and goodness of fit tests for detection functions
Description
Constructs a quantile-quantile (Q-Q) plot for fitted model as a graphical
check of goodness of fit. Formal goodness of fit testing for detection
function models using Kolmogorov-Smirnov and Cramer-von Mises tests. Both
tests are based on looking at the quantile-quantile plot produced by
qqplot.ddf
and deviations from the line x=y.
Usage
qqplot.ddf(model, plot = TRUE, nboot = 100, ks = FALSE, ...)
Arguments
model |
fitted distance detection function model object |
plot |
the Q-Q plot be plotted or just report statistics? |
nboot |
number of replicates to use to calculate p-values for the goodness of fit test statistics |
ks |
perform the Kolmogorov-Smirnov test (this involves many bootstraps so can take a while) |
... |
additional arguments passed to |
Details
The Kolmogorov-Smirnov test asks the question "what's the largest vertical distance between a point and the y=x line?" It uses this distance as a statistic to test the null hypothesis that the samples (EDF and CDF in our case) are from the same distribution (and hence our model fits well). If the deviation between the y=x line and the points is too large we reject the null hypothesis and say the model doesn't have a good fit.
Rather than looking at the single biggest difference between the y=x line and the points in the Q-Q plot, we might prefer to think about all the differences between line and points, since there may be many smaller differences that we want to take into account rather than looking for one large deviation. Its null hypothesis is the same, but the statistic it uses is the sum of the deviations from each of the point to the line.
Value
A list of goodness of fit related values:
edf |
matrix of lower and upper empirical distribution function values |
cdf |
fitted cumulative distribution function values |
ks |
list with K-S statistic
( |
CvM |
list with CvM statistic
( |
Details
Note that a bootstrap procedure is required to ensure that the p-values from the procedure are correct as the we are comparing the cumulative distribution function (CDF) and empirical distribution function (EDF) and we have estimated the parameters of the detection function.
Author(s)
Jeff Laake, David L Miller
References
Burnham, K.P., S.T. Buckland, J.L. Laake, D.L. Borchers, T.A. Marques, J.R.B. Bishop, and L. Thomas. 2004. Further topics in distance sampling. pp: 385-389. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
See Also
Iterative offset model fitting of mark-recapture with removal model
Description
Detection function fitting from mark-recapture data with a removal
configuration in which a secondary observer knows what the primary observer
detects and detects objects missed by the primary observer. The iterative
offset glm/gam uses an offset to compensate for the conditioning on the set
of objects seen by either observer (eg 00 those missed by both observers are
not included in the analysis. This function is similar to
io.glm
.
Usage
rem.glm(
datavec,
fitformula,
eps = 1e-05,
iterlimit = 500,
GAM = FALSE,
gamplot = TRUE,
datavec2
)
Arguments
datavec |
dataframe containing records seen by either observer 1 or 2 |
fitformula |
logit link formula |
eps |
convergence criterion |
iterlimit |
maximum number of iterations allowed |
GAM |
uses GAM instead of GLM for fitting |
gamplot |
set to TRUE to get a gam plot object if |
datavec2 |
dataframe containing all records for observer 1 and observer 2 as in io.glm form; this is used in case there is an observer(not platform effect) |
Details
The only difference between this function and io.glm
is the
offset and the data construction because there is only one detection
function being estimated for the primary observer. The two functions could
be merged.
Value
list of class("remglm","glm","lm") or class("remglm","gam")
glmobj |
GLM or GAM object |
offsetvalue |
offsetvalues from iterative fit |
plotobj |
gam plot object (if GAM & gamplot==TRUE, else NULL) |
Note
currently the code in this function for GAMs has been commented out until the remainder of the mrds package will work with GAMs.
Author(s)
Jeff Laake
References
Buckland, S.T., J.M. breiwick, K.L. Cattanach, and J.L. Laake. 1993. Estimated population size of the California gray whale. Marine Mammal Science, 9:235-249.
Burnham, K.P., S.T. Buckland, J.L. Laake, D.L. Borchers, T.A. Marques, J.R.B. Bishop, and L. Thomas. 2004. Further topics in distance sampling. pp: 360-363. In: Advanced Distance Sampling, eds. S.T. Buckland, D.R.Anderson, K.P. Burnham, J.L. Laake, D.L. Borchers, and L. Thomas. Oxford University Press.
Calculate the parameter rescaling for parameters associated with covariates
Description
This will calculate the rescaling needed when covariates to be included in
the scale of the detection function are "too big". Based on code from
optimx
.
Usage
rescale_pars(initialvalues, ddfobj)
Arguments
initialvalues |
starting values for the optimisation |
ddfobj |
detection function object |
Details
Derivative-free methods like nlminb are sensitive to the parameters being poorly scaled. This can also cause problems for quasi-Newton methods too (at least, bad scaling won't _help_ the optimisation). So here we rescale the parameters if necessary (unless we already got scaling from control)
Author(s)
David L Miller
Generate data from a fitted detection function and refit the model
Description
Generate data from a fitted detection function and refit the model
Usage
sample_ddf(ds.object)
Arguments
ds.object |
a fitted detection function object |
Note
This function changes the random number generator seed. To avoid any
potential side-effects, use something like: seed <-
get(".Random.seed",envir=.GlobalEnv)
before running code and
assign(".Random.seed",seed,envir=.GlobalEnv)
after.
Author(s)
David L. Miller
Set parameter bounds
Description
Set values of lower and upper bounds and check lengths of any user-specified values
Usage
setbounds(lowerbounds, upperbounds, initialvalues, ddfobj, width, left)
Arguments
lowerbounds |
vector of lower bounds |
upperbounds |
vector of upper bounds |
initialvalues |
vector of initial parameter estimates |
ddfobj |
distance detection function object |
width |
truncation distance |
left |
left truncation distance |
Value
lower |
vector of lower bounds |
upper |
vector of upper bounds |
setlower |
logical indicating whether user set lower bounds |
setupper |
logical indicating whether user set upper bounds |
Author(s)
Jeff Laake
Creates design matrix for covariates in detection function
Description
This function creates a design matrix for the g(0) or scale covariates using
the input model formula. It returns a list which contains 2 elements: 1)
dim: the dimension (number of columns) of the design matrix, and 2) cov: the
constructed design matrix. This function is relatively simple because it
uses the built-in function model.matrix
which does the
majority of the work. This function handles 2 exceptions "~.", the null
model with 0 columns and "~1" the intercept only model - a column of 1s. If
a model other than the 2 exceptions is provided, it calls
model.matrix
to construct the columns. If any of the columns of
the design matrix are all 0's the column is removed. This occurs when there
is no data for a particular factor.
Usage
setcov(dmat, model)
Arguments
dmat |
data matrix |
model |
model formula |
Value
a design matrix for the specified data and model
Author(s)
Jeff Laake
Set initial values for detection function based on distance sampling
Description
For a given detection function, it computes the initial values for the parameters including scale and shape parameters and adjustment function parameters if any. If there are user-defined initial values only the parameters not specified by the user are computed.
Usage
setinitial.ds(ddfobj, width, initial, point, left)
sethazard(ddfobj, dmat, width, left, point)
Arguments
ddfobj |
distance detection function object |
width |
half-width of transect or radius of point count |
initial |
list of user-defined initial values with possible elements:
|
point |
if |
left |
left truncation |
dmat |
|
Value
scale |
vector of initial scale parameter values |
shape |
vector of initial shape parameter values |
adjustment |
vector of initial adjustment function parameter values |
Author(s)
Jeff Laake, David L Miller
Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions.
Description
Simulation of distance sampling data via mixture models Allows one to simulate line transect distance sampling data using a mixture of half-normal detection functions.
Usage
sim.mix(n, sigma, mix.prop, width, means = 0)
Arguments
n |
number of samples to generate |
sigma |
vector of scale parameters |
mix.prop |
vector of mixture proportions (same length as sigma) |
width |
truncation |
means |
vector of means (used to generate wacky, non-monotonic data) |
Value
distances a vector of distances
Note
At the moment this is TOTALLY UNSUPPORTED! Please don't use it for anything important!
Author(s)
David Lawrence Miller
Invert of covariance matrices
Description
Tries to invert a matrix by solve
. If this fails because of
singularity, an eigenvector decomposition is computed, and eigenvalues below
1/cmax
are replaced by 1/cmax
, i.e., cmax
will be the
corresponding eigenvalue of the inverted matrix.
Usage
solvecov(m, cmax = 1e+10)
Arguments
m |
a numeric symmetric matrix. |
cmax |
a positive value, see above. |
Value
A list with the following components: inv
the inverted
matrix, coll
TRUE
if solve
failed because of
singularity.
Source
solvecov
code was taken from package fpc
: Christian Hennig
Author(s)
Christian Hennig
See Also
solve, eigen
Wooden stake data from 1977 survey
Description
Multiple surveys by different observers of a single 1km transect containing 150 wooden stakes placed randomly throughout a 40 m strip (20m on either side).
Format
A data frame with 150 observations on the following 10 variables.
- StakeNo
unique number for each stake 1-150
- PD
perpendicular distance at which the stake was placed from the line
- Obs1
0/1 whether missed/seen by observer 1
- Obs2
0/1 whether missed/seen by observer 2
- Obs3
0/1 whether missed/seen by observer 3
- Obs4
0/1 whether missed/seen by observer 4
- Obs5
0/1 whether missed/seen by observer 5
- Obs6
0/1 whether missed/seen by observer 6
- Obs7
0/1 whether missed/seen by observer 7
- Obs8
0/1 whether missed/seen by observer 8
Source
Laake, J. 1978. Line transect estimators robust to animal movement. M.S. Thesis. Utah State University, Logan, Utah. 55p.
References
Burnham, K. P., D. R. Anderson, and J. L. Laake. 1980. Estimation of Density from Line Transect Sampling of Biological Populations. Wildlife Monographs:7-202.
Examples
data(stake77)
# Extract functions for stake data and put in the mrds format
extract.stake <- function(stake,obs){
extract.obs <- function(obs){
example <- subset(stake,eval(parse(text=paste("Obs",obs,"==1",sep=""))),
select="PD")
example$distance <- example$PD
example$object <- 1:nrow(example)
example$PD <- NULL
return(example)
}
if(obs!="all"){
return(extract.obs(obs=obs))
}else{
example <- NULL
for(i in 1:(ncol(stake)-2)){
df <- extract.obs(obs=i)
df$person <- i
example <- rbind(example,df)
}
example$person <- factor(example$person)
example$object <- 1:nrow(example)
return(example)
}
}
extract.stake.pairs <- function(stake,obs1,obs2,removal=FALSE){
obs1 <- paste("Obs",obs1,sep="")
obs2 <- paste("Obs",obs2,sep="")
example <- subset(stake,eval(parse(text=paste(obs1,"==1 |",obs2,"==1 ",
sep=""))),select=c("PD",obs1,obs2))
names(example) <- c("distance","obs1","obs2")
detected <- c(example$obs1,example$obs2)
example <- data.frame(object = rep(1:nrow(example),2),
distance = rep(example$distance,2),
detected = detected,
observer = c(rep(1,nrow(example)),
rep(2,nrow(example))))
if(removal) example$detected[example$observer==2] <- 1
return(example)
}
# extract data for observer 1 and fit a single observer model
stakes <- extract.stake(stake77,1)
ds.model <- ddf(dsmodel = ~mcds(key = "hn", formula = ~1), data = stakes,
method = "ds", meta.data = list(width = 20))
plot(ds.model,breaks=seq(0,20,2),showpoints=TRUE)
ddf.gof(ds.model)
# extract data from observers 1 and 3 and fit an io model
stkpairs <- extract.stake.pairs(stake77,1,3,removal=FALSE)
io.model <- ddf(dsmodel = ~mcds(key = "hn", formula=~1),
mrmodel=~glm(formula=~distance),
data = stkpairs, method = "io")
summary(io.model)
par(mfrow=c(3,2))
plot(io.model,breaks=seq(0,20,2),showpoints=TRUE,new=FALSE)
dev.new()
ddf.gof(io.model)
Wooden stake data from 1978 survey
Description
Multiple surveys by different observers of a single 1km transect containing 150 wooden stakes placed based on expected uniform distribution throughout a 40 m strip (20m on either side).
Format
A data frame with 150 observations on the following 13 variables.
- StakeNo
unique number for each stake 1-150
- PD
perpendicular distance at which the stake was placed from the line
- Obs1
0/1 whether missed/seen by observer 1
- Obs2
0/1 whether missed/seen by observer 2
- Obs3
0/1 whether missed/seen by observer 3
- Obs4
0/1 whether missed/seen by observer 4
- Obs5
0/1 whether missed/seen by observer 5
- Obs6
0/1 whether missed/seen by observer 6
- Obs7
0/1 whether missed/seen by observer 7
- Obs8
0/1 whether missed/seen by observer 8
- Obs9
0/1 whether missed/seen by observer 9
- Obs10
0/1 whether missed/seen by observer 10
- Obs11
0/1 whether missed/seen by observer 11
Details
The 1997 survey was based on a single realization of a uniform distribution. Because it was a single transect and there was no randomization of the distances for each survey, we repeated the experiment and used distances that provided a uniform distribution but randomly sorted the positions along the line so there was no pattern obvious to the observer.
Source
Laake, J. 1978. Line transect estimators robust to animal movement. M.S. Thesis. Utah State University, Logan, Utah. 55p.
References
Burnham, K. P., D. R. Anderson, and J. L. Laake. 1980. Estimation of Density from Line Transect Sampling of Biological Populations. Wildlife Monographs:7-202.
Examples
data(stake78)
data(stake77)
# compare distribution of distances for all stakes
hist(stake77$PD)
hist(stake78$PD)
# Extract stake data and put in the mrds format for model fitting.
extract.stake <- function(stake,obs){
extract.obs <- function(obs){
example <- subset(stake,eval(parse(text=paste("Obs",obs,"==1",sep=""))),
select="PD")
example$distance <- example$PD
example$object <- 1:nrow(example)
example$PD <- NULL
return(example)
}
if(obs!="all"){
return(extract.obs(obs=obs))
}else{
example <- NULL
for(i in 1:(ncol(stake)-2)){
df <- extract.obs(obs=i)
df$person <- i
example <- rbind(example,df)
}
example$person <- factor(example$person)
example$object <- 1:nrow(example)
return(example)
}
}
extract.stake.pairs <- function(stake,obs1,obs2,removal=FALSE){
obs1 <- paste("Obs",obs1,sep="")
obs2 <- paste("Obs",obs2,sep="")
example <- subset(stake,eval(parse(text=paste(obs1,"==1 |",obs2,"==1 ",
sep=""))), select=c("PD",obs1,obs2))
names(example) <- c("distance","obs1","obs2")
detected <- c(example$obs1,example$obs2)
example <- data.frame(object=rep(1:nrow(example),2),
distance=rep(example$distance,2),
detected = detected,
observer=c(rep(1,nrow(example)),
rep(2,nrow(example))))
if(removal) example$detected[example$observer==2] <- 1
return(example)
}
# extract data for observer 10 and fit a single observer model
stakes <- extract.stake(stake78,10)
ds.model <- ddf(dsmodel = ~mcds(key = "hn", formula = ~1), data = stakes,
method = "ds", meta.data = list(width = 20))
plot(ds.model,breaks=seq(0,20,2),showpoints=TRUE)
ddf.gof(ds.model)
# extract data from observers 5 and 7 and fit an io model
stkpairs <- extract.stake.pairs(stake78,5,7,removal=FALSE)
io.model <- ddf(dsmodel = ~mcds(key = "hn", formula=~1),
mrmodel=~glm(formula=~distance),
data = stkpairs, method = "io")
summary(io.model)
par(mfrow=c(3,2))
plot(io.model,breaks=seq(0,20,2),showpoints=TRUE,new=FALSE)
ddf.gof(io.model)
Summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error.
Usage
## S3 method for class 'ds'
summary(object, se = TRUE, N = TRUE, ...)
Arguments
object |
a |
se |
if TRUE, computes standard errors |
N |
if TRUE, computes abundance in covered (sampled) region |
... |
unspecified and unused arguments for S3 consistency |
Details
The argument N
is used to suppress computation of
abundance and average detection probability in calls to summarize the
ds
and either io.fi
or trial.fi
for summaries of
io
and trial
objects respectively which are composed of a
ds
model object and a mark-recapture model object. The corresponding
print function is called to print the summary results.
Value
list of extracted and summarized objects
Note
This function is called by the generic function summary
for any
ddf
model object. Each function can be called directly by the
user, but it is typically safest to use the generic function
summary
which calls the appropriate function based on the type of
ddf
model.
Author(s)
Jeff Laake
Summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error.
Usage
## S3 method for class 'io'
summary(object, se = TRUE, ...)
Arguments
object |
a |
se |
if TRUE, computes standard errors |
... |
unspecified and unused arguments for S3 consistency |
Details
The argument N
is used to suppress computation of
abundance and average detection probability in calls to summarize the
ds
and either io.fi
or trial.fi
for summaries of
io
and trial
objects respectively which are composed of a
ds
model object and a mark-recapture model object. The corresponding
print function is called to print the summary results.
Value
list of extracted and summarized objects
Note
This function is called by the generic function summary
for any
ddf
model object. Each function can be called directly by the
user, but it is typically safest to use the generic function
summary
which calls the appropriate function based on the type of
ddf
model.
Author(s)
Jeff Laake
Summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error.
Usage
## S3 method for class 'io.fi'
summary(object, se = TRUE, N = TRUE, fittedmodel = NULL, ddfobj = NULL, ...)
Arguments
object |
a |
se |
if TRUE, computes standard errors |
N |
if TRUE, computes abundance in covered (sampled) region |
fittedmodel |
full fitted model when called from |
ddfobj |
distance sampling object description |
... |
unspecified and unused arguments for S3 consistency |
Details
The argument N
is used to suppress computation of
abundance and average detection probability in calls to summarize the
ds
and either io.fi
or trial.fi
for summaries of
io
and trial
objects respectively which are composed of a
ds
model object and a mark-recapture model object. The corresponding
print function is called to print the summary results.
Value
list of extracted and summarized objects
Note
This function is called by the generic function summary
for any
ddf
model object. Each function can be called directly by the
user, but it is typically safest to use the generic function
summary
which calls the appropriate function based on the type of
ddf
model.
Author(s)
Jeff Laake
Summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error.
Usage
## S3 method for class 'rem'
summary(object, se = TRUE, ...)
Arguments
object |
a |
se |
if TRUE, computes standard errors |
... |
unspecified and unused arguments for S3 consistency |
Details
The argument N
is used to suppress computation of
abundance and average detection probability in calls to summarize the
ds
and either io.fi
or trial.fi
for summaries of
io
and trial
objects respectively which are composed of a
ds
model object and a mark-recapture model object. The corresponding
print function is called to print the summary results.
Value
list of extracted and summarized objects
Note
This function is called by the generic function summary
for any
ddf
model object. Each function can be called directly by the
user, but it is typically safest to use the generic function
summary
which calls the appropriate function based on the type of
ddf
model.
Author(s)
Jeff Laake
Summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error.
Usage
## S3 method for class 'rem.fi'
summary(object, se = TRUE, N = TRUE, fittedmodel = NULL, ...)
Arguments
object |
a |
se |
if TRUE, computes standard errors |
N |
if TRUE, computes abundance in covered (sampled) region |
fittedmodel |
full fitted model when called from |
... |
unspecified and unused arguments for S3 consistency |
Details
The argument N
is used to suppress computation of
abundance and average detection probability in calls to summarize the
ds
and either io.fi
or trial.fi
for summaries of
io
and trial
objects respectively which are composed of a
ds
model object and a mark-recapture model object. The corresponding
print function is called to print the summary results.
Value
list of extracted and summarized objects
Note
This function is called by the generic function summary
for any
ddf
model object. Each function can be called directly by the
user, but it is typically safest to use the generic function
summary
which calls the appropriate function based on the type of
ddf
model.
Author(s)
Jeff Laake
Summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error.
Usage
## S3 method for class 'trial'
summary(object, se = TRUE, ...)
Arguments
object |
a |
se |
if TRUE, computes standard errors |
... |
unspecified and unused arguments for S3 consistency |
Details
The argument N
is used to suppress computation of
abundance and average detection probability in calls to summarize the
ds
and either io.fi
or trial.fi
for summaries of
io
and trial
objects respectively which are composed of a
ds
model object and a mark-recapture model object. The corresponding
print function is called to print the summary results.
Value
list of extracted and summarized objects
Note
This function is called by the generic function summary
for any
ddf
model object. Each function can be called directly by the
user, but it is typically safest to use the generic function
summary
which calls the appropriate function based on the type of
ddf
model.
Author(s)
Jeff Laake
Summary of distance detection function model object
Description
Provides a brief summary of data and fitted detection probability model parameters, model selection criterion, and optionally abundance in the covered (sampled) region and its standard error.
Usage
## S3 method for class 'trial.fi'
summary(object, se = TRUE, N = TRUE, fittedmodel = NULL, ...)
Arguments
object |
a |
se |
if TRUE, computes standard errors |
N |
if TRUE, computes abundance in covered (sampled) region |
fittedmodel |
full fitted model when called from |
... |
unspecified and unused arguments for S3 consistency |
Details
The argument N
is used to suppress computation of
abundance and average detection probability in calls to summarize the
ds
and either io.fi
or trial.fi
for summaries of
io
and trial
objects respectively which are composed of a
ds
model object and a mark-recapture model object. The corresponding
print function is called to print the summary results.
Value
list of extracted and summarized objects
Note
This function is called by the generic function summary
for any
ddf
model object. Each function can be called directly by the
user, but it is typically safest to use the generic function
summary
which calls the appropriate function based on the type of
ddf
model.
Author(s)
Jeff Laake
Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region
Description
Extrapolate Horvitz-Thompson abundance estimates to entire surveyed region
Usage
survey.region.dht(Nhat.by.sample, samples, width, left, point, areas.supplied)
Arguments
Nhat.by.sample |
dataframe of abundance by sample |
samples |
samples table |
width |
truncation width |
left |
left truncation if any |
point |
if TRUE point count otherwise line transect |
areas.supplied |
if |
Value
Revised Nhat.by.sample dataframe containing estimates extrapolated to survey region
Note
Internal function called by dht
and related functions.
Author(s)
Jeff Laake and David L Miller
Test validity for histogram breaks(cutpoints)
Description
Determines whether user specified breaks for histograms are properly ordered and match the left and right truncation.
Usage
test.breaks(breaks, left, width)
Arguments
breaks |
vector of cutpoints (breaks) for distance histogram |
left |
left truncation value |
width |
right truncation value; either radius of point count or half-width of transect |
Value
vector of breaks modified to be valid if necessary
Author(s)
Jeff Laake
Compute empirical variance of encounter rate
Description
Computes one of a series of possible variance estimates for the observed encounter rate for a set of sample measurements (e.g., line lengths) and number of observations per sample.
Usage
varn(lvec,nvec,type)
covn(lvec, groups1, groups2, type)
Arguments
lvec |
vector of sample measurements (e.g., line lengths) |
nvec |
vector of number observed |
type |
choice of variance estimator to use for encounter rate |
groups1 |
vector of number of groups observed |
groups2 |
vector of number of individuals observed |
Details
The choice of type follows the notation of Fewster et al. (2009) in that there are 8 choices of encounter rate variance that can be computed for lines and one for points:
R2
random line placement with unequal line lengths (design-assisted estimator)
R3
random line placement, model-assisted estimator, based on true contagion process
R4
random line placement, model-assisted estimator, based on apparent contagion process
S1
systematic line placement, post-stratification with no strata overlap
S2
systematic line placement, post-stratification with no strata overlap, variances weighted by line length per stratum
O1
systematic line placement, post-stratification with overlapping strata (akin to S1)
O2
systematic line placement, post-stratification with overlapping strata (weighted by line length per stratum, akin to S2)
O3
systematic line placement, post-stratification with overlapping strata, model-assisted estimator with trend in encounter rate with line length
P2
random point placement, potentially unequal number of visits per point, design-based estimator
P3
random point placement, potentially unequal number of visits per point, model-based estimator
Default value is "R2"
, shown in Fewster et al. (2009) to have good
performance for completely random designs for lines. For systematic parallel
line transect designs, Fewster et al. (2009) recommend "O2"
. For point
transects the default is "P2"
(but "P3"
is also available).
For the systematic estimators, pairs are assigned in the order they are
given in the lengths
and groups
vectors.
Value
Variance of encounter rate as defined by arguments
Note
This function is also used with different calling arguments to compute Innes et al. (2002) variance of the estimated abundances/length rather than observation encounter rate. The function covn is probably only valid for R3 and R2. Currently, the R2 form is used for all types other than R3.
Author(s)
Jeff Laake, David L Miller
References
Fewster RM, Buckland ST, Burnham KP, Borchers DL, Jupp PE, Laake JL, Thomas L (2009).
“Estimating the encounter rate variance in distance sampling.”
Biometrics, 65(1), 225-236.
Innes S, Heide-Jørgensen MP, Laake JL, Laidre KL, Cleator HJ, Richard P, Stewart RE (2002).
“Surveys of belugas and narwhals in the Canadian High Arctic in 1996.”
NAMMCO Scientific Publications, 4, 169-190.