F.cjs.estim(capture, survival, histories, cap.init, sur.init, group, nhat.v.meth = 1,
c.hat = -1, df = NA, intervals=rep(1,ncol(histories)-1), conf=0.95,
link="logit", control=mra.control())
histories
matrix (see below). NS = number of samples = number of columns in histories
matrix (see below). Number of matrices specified in the capture model is assumed to be NX. Time
varying and individual varying vectors are fitted using ivar()
and tvar()
(see Details).
Factors are allowed within ivar()
and tvar()
. ivar()
and tvar()
(see Details). Factors are allowed within ivar()
and tvar()
. capture
. The default value usually works. survival
. The default value usually works. c.hat
for pooling rules for these
test components to estimate C-hat.nhat.v.meth
= 1 uses the variance estimator of
Taylor et al. 2002, Ursus, p. 188 which is the so-called Huggins variance estimator, and incorporates
covariances. nhat.v.meth
= 2 uses the variance estimator of Amstrup et al.
2005 (p. 244, Eqn. 9.10), which is the same variance estimator as nhat.v.meth
= 1
with more 2nd order approximation terms included. Method 2 should provide better variances
than method 1, especially if the coefficient of variation of capture probabilities
are >1.0, but method 2 has not been studied as much as method 1.
nhat.v.meth
= 3 uses the variance estimator of McDonald and Amstrup, 1999, JABES, which is a 1st order approximation
that does not incorporate covariances. Method 3 is much faster than methods 1 and 2
and could be easily calculated by hand, but
should only be used when there is little capture heterogeneity. c.hat
) to use
during estimation. If input value of c.hat
is <= 2="" 3="" 0,="" mrawin="" computes="" an="" estimate="" of="" variance="" inflation="" based="" on="" test="" and="" applied="" to="" groups="" (if="" called="" for,="" see="" group above)
using Manly, McDonald, and McDonald, 1993, rules for pooling. I.e.,
all cells in each TEST 2 or TEST 3 Chi-square component table must be
>= 5 before that component contributes to the estimate of C-hat. This rules is
slightly different than program MARK's pooling rules, so MRA's and MARK's
estimates of c.hat
will generally be different. If the input c.hat
> 0,
MRAWIN does not estimate C.hat, and uses the supplied value. =>
df
== NA, the number of parameters is estimated from the rank of the
matrix of 2nd derivatives or Hessian, depending on cov.meth
parameter.
If df
<= 0,="" the="" number="" of="" parameters="" will="" be="" set="" to="" nx+ny="the" estimated="" coefficients.="" otherwise,="" if="" df > 0,
the supplied value is used. Only AIC, QAIC, AICc, and QAICc are dependent on
this value (in their penalty terms). =>
ncol(histories)-1
(i.e.,
number of capture occasions minus 1) specifying relative time intervals between occasions.
For example, if capture occasions occurred in 1999, 2000, 2005, and 2007 intervals
would
be set to c(1,5,2)
. Estimates of survival are adjusted for time intervals between
occasions assuming an exponential lifetime model, i.e., probability of surviving
from occasion j
to occasion j+1
is Phi(j)^(jth interval length)
, and
it is the Phi(j)
's that are related to covariates through the survival model. In
other words, all survival estimates are for an interval of length 1. If an interval
of 1 is one year, then all survival estimates will be annual survival, with probability
of surviving 2 years equal to annual survival squared, probability of surviving 3 years
equal to annual survival cubed, etc.
mra.control()
for a description of the individual control parameters.print.cr
to print
it nicely. Use names(fit)
, where the call was fit <- F.cr.estim(...)
,
to see names of all returned components. To see values of individual components,
issue commands like fit$s.hat, fit$se.s.hat, fit$n.hat, etc.Components of the returned object are as follows:
loglik
. This is relative deviance, see help for
F.sat.lik
.deviance
+ 2*(df). df is either the estimated number of independent
parameters (by default), or NX+NY, or a specified value, depending on the input value of DF parameter.deviance
/ vif
) + 2(df)df
*(df
+1)) / (nan
- df
- 1)df
*(df
+1))/(nan
- df
- 1)chisq.vif
/ chisq.df
vif
, based
on pooling rules.F.update.df
to update this value after
the model is fitted.df
can be updated using F.update.df
. exit.code
), and
(3) covariance matrix code (interprets cov.code
). exit.code
is in message
.
Exit codes are as follows:
exit.code
= 3, fn.evals
equals the maximum set in mra.control
. This, in combination
with the exit codes and execution time, can help detect non-convergence or bad behavior. exit.code
, cov.code
, and fn.evals
, this could be used to detect ill-behaved
or marginally unstable problems, if you know what you are doing. Assuming maxfn
is set high
in mra.control()
(e.g., 1000),
if exit.code = 1
but the model takes a long time to execute relative to similarly sized problems,
it could indicate unstable or marginally ill-behaved models. n.hat
= NS. No estimate for
first occasion.n.hat
estimates. Computed using method
specified in nhat.v.meth
.n.hat.conf
percent on n.hat
. Length NS.n.hat.conf
percent on n.hat
. Length NS.n.hat
n.hat
histories
matrix.F.cjs.gof
for a description of $Psi(ij)$. control=mra.control(trace=1)
, a log file, named mra.log
, is written to the current directory. This file contains
additional details, such as individual Test 2 and Test 3 components, in a semi-friendly
format. This file is overwritten each run. See help(mra.control)
for more details. Model Specification: Both the capture
and survival
model can be
specified as any combination of 2-d matrices (time and individual varying covariates),
1-d time varying vectors, 1-d individual
varying vectors, 1-d time varying factors, and 1-d individual varying factors.
Specification of time or individual varying effects uses the
tvar
(for 'time varying') and ivar
(for 'individual varying') functions.
These functions expand covariate vectors along the appropriate dimension to
be 2-d matrices suitable for fitting in the model. ivar
expands
an individual varying vector to all occasions. tvar
expands a time
varying covariate to all individuals. To do the expansion, both tvar
and ivar
need to know the size of the 'other' dimension. Thus, tvar(x,100)
specifies a 2-d matrix with size 100
by length(x)
.
ivar(x,100)
specifies a 2-d matrix with size length(x)
by 100
.
For convenience, the 'other' dimension of time or individual varying covariates
can be specified as an attribute of the vector. Assuming x
is a NS vector and the 'nan' attribute of x
has been set as
attr(x,"nan") <- NAN
, tvar(x,NAN)
and
tvar(x)
are equivalent. Same, but vise-versa, for individual varying
covariates (i.e.,
assign the number of occasions using attr(x,"ns")<-NS
). This saves
some typing in model specification.
Factors are allowed in ivar
and tvar
. When a factor is specified,
the contr.treatment
coding is used. By default, an intercept
is assumed and the first level of all
factors are dropped from the model (i.e., first levels are the reference levels,
the default R action). However, there are applications where more than one level
will need to be dropped, and the user has control over this via the drop.levels
argument to ivar
and tvar
. For example,
tvar(x,drop.levels=c(1,2))
drops the first 2 levels of factor x.
tvar(x,drop.levels=length(levels(x)))
does the SAS thing and drops
the last level of factor x
. If drop.levels
is outside the range
[1,length(levels(x))
] (e.g., negative or 0), no levels of the factor
are dropped. If no intercept is fitted in the model, this results in the
so-called cell means coding for factors.
Example model specifications: Assume 'age' is a NAN x NS 2-d matrix of ages, 'effort' is a size NS 1-d vector of efforts, and 'sex' is a size NAN 1-d factor of sex designations ('M' and 'F').
Values in 2-d Matrix Covariates: Even though covariate matrices are required to be NAN x NS (same size as capture histories), there are not that many parameters. The first capture probability cannot be estimated in CJS models, and the NS-th survival parameter does not exist. When a covariate matrix appears in the capture model, only values in columns 2:ncol(histories) are used. When a covariate matrix appears in the survival model, only values in columns 1:(ncol(histories)-1) are used. See examples for demonstration.
Manly, B. F. J., L. L. McDonald, and T. L. McDonald. 1999. The robustness of mark-recapture methods: a case study for the northern spotted owl. Journal of Agricultural, Biological, and Environmental Statistics 4:78-101.
Huggins, R. M. 1989. On the statistical analysis of capture experiments. Biometrika 76:133-140.
Amstrup, S. C., T. L. McDonald, and B. F. J. Manly (editors). 2005. Handbook of Capture-Recapture Analysis. Princeton University Press.
Peterson. 1986. Statistics and Probability Letters. p.227.
McDonald, T. L., and S. C. Amstrup. 2001. Estimation of population size using open capture-recapture models. Journal of Agricultural, Biological, and Environmental Statistics 6:206-220.
tvar
, ivar
, print.cjs
, residuals.cjs
, plot.cjs
,
F.cjs.covars
, F.cjs.gof
, mra.control
, F.update.df
## Fit CJS model to dipper data, time-varying capture and survivals.
## Method 1 : using factors
data(dipper.histories)
ct <- as.factor( paste("T",1:ncol(dipper.histories), sep=""))
attr(ct,"nan")<-nrow(dipper.histories)
dipper.cjs <- F.cjs.estim( ~tvar(ct,drop=c(1,2)), ~tvar(ct,drop=c(1,6,7)), dipper.histories )
## Method 2 : same thing using 2-d matrices
xy <- F.cjs.covars( nrow(dipper.histories), ncol(dipper.histories) )
# The following extracts 2-D matrices of 0s and 1s
for(j in 1:ncol(dipper.histories)){ assign(paste("x",j,sep=""), xy$x[,,j]) }
dipper.cjs <- F.cjs.estim( ~x3+x4+x5+x6+x7, ~x2+x3+x4+x5, dipper.histories )
## Values in the 1st column of capture covariates do not matter
x3.a <- x3
x3.a[,1] <- 999
dipper.cjs2 <- F.cjs.estim( ~x3.a+x4+x5+x6+x7, ~x2+x3+x4+x5, dipper.histories )
# compare dipper.cjs2 to dipper.cjs
## Values in the last column of survival covariates do not matter
x3.a <- x3
x3.a[,ncol(dipper.histories)] <- 999
dipper.cjs2 <- F.cjs.estim( ~x3+x4+x5+x6+x7, ~x2+x3.a+x4+x5, dipper.histories )
# compare dipper.cjs2 to dipper.cjs
## A plot to compare the link functions
sine.link <- function(eta){ ifelse( eta < -4, 0, ifelse( eta > 4, 1, .5*(1+sin(eta*pi/8)))) }
eta <- seq(-5,5, length=40)
p1 <- 1 / (1 + exp(-eta))
p2 <- sine.link(eta)
p3 <- 1.0 - exp( -exp( eta ))
plot(eta, p1, type="l" )
lines(eta, p2, col="red" )
lines(eta, p3, col="blue" )
legend( "topleft", legend=c("logit", "sine", "hazard"), col=c("black", "red", "blue"), lty=1)
Run the code above in your browser using DataLab