cjs.lnl | R Documentation |
For a given set of parameters and data, it computes -log Likelihood value.
cjs.lnl(
par,
model_data,
Phi.links = NULL,
p.links = NULL,
debug = FALSE,
all = FALSE,
cjsenv
)
par |
vector of parameter values |
model_data |
a list that contains: 1)imat-list of vectors and matrices constructed by
|
Phi.links |
vector of links for each parameter |
p.links |
vector of links for each parameter |
debug |
if TRUE will printout values of |
all |
if TRUE, returns entire list rather than just lnl; can be used to extract reals |
cjsenv |
environment for cjs to update iteration counter |
This function uses a FORTRAN subroutine (cjs.f) to speed up computation of the likelihood but the result can also be obtained wholly in R with a small loss in precision. See R code below. The R and FORTRAN code uses the likelihood formulation of Pledger et al.(2003).
get.p=function(beta,dm,nocc,Fplus) { # compute p matrix from parameters (beta) and list of design matrices (dm) # created by function create.dm ps=cbind(rep(1,nrow(dm)/(nocc-1)), matrix(dm ps[Fplus==1]=plogis(ps[Fplus==1]) return(ps) } get.Phi=function(beta,dm,nocc,Fplus) { # compute Phi matrix from parameters (beta) and list of design matrices (dm) # created by function create.dm Phis=cbind(rep(1,nrow(dm)/(nocc-1)), matrix(dm Phis[Fplus==1]=plogis(Phis[Fplus==1]) return(Phis) } ################################################################################# # cjs.lnl - computes likelihood for CJS using Pledger et al (2003) # formulation for the likelihood. This code does not cope with fixed parameters or # loss on capture but could be modified to do so. Also, to work directly with cjs.r and # cjs.accumulate call to process.ch would have to have all=TRUE to get Fplus and L. # Arguments: # par - vector of beta parameters # imat - list of freq, indicator vector and matrices for ch data created by process.ch # Phi.dm - list of design matrices; a dm for each capture history # p.dm - list of design matrices; a dm for each capture history # debug - if TRUE show iterations with par and -2lnl # time.intervals - intervals of time between occasions # Value: -LnL using ################################################################################# cjs.lnl=function(par,model_data,Phi.links=NULL,p.links=NULL,debug=FALSE,all=FALSE) { if(debug)cat("\npar = ",par) #extract Phi and p parameters from par vector nphi=ncol(model_data$Phi.dm) np=ncol(model_data$p.dm) beta.phi=par[1:nphi] beta.p=par[(nphi+1):(nphi+np)] #construct parameter matrices (1 row for each capture history and a column #for each occasion) Phis=get.Phi(beta.phi,model_data$Phi.dm,nocc=ncol(model_data$imat$chmat), model_data$imat$Fplus) if(!is.null(model_data$time.intervals)) { exponent=cbind(rep(1,nrow(Phis)),model_data$time.intervals) Phis=Phis^exponent } ps=get.p(beta.p,model_data$p.dm,nocc=ncol(model_data$imat$chmat), model_data$imat$Fplus) if(debug)cat("\npar = ",par) # Compute probability of dying in interval from Phis M=cbind((1-Phis)[,-1],rep(1,nrow(Phis))) # compute cummulative survival from release across each subsequent time # and the cummulative probability for detection (capture) across each time Phi.cumprod=1-model_data$imat$Fplus + Phis*model_data$imat$Fplus cump=(1-model_data$imat$Fplus)+model_data$imat$Fplus* (model_data$imat$chmat*ps+(1-model_data$imat$chmat)*(1-ps)) for (i in 2:ncol(cump)) { Phi.cumprod[,i]=Phi.cumprod[,i-1]*Phi.cumprod[,i] cump[,i]=cump[,i-1]*cump[,i] } # compute prob of capture-history pch=rowSums(model_data$imat$L*M*Phi.cumprod*cump) lnl=-sum(model_data$imat$freq*log(pch)) if(debug)cat("\n-2lnl = ",2*lnl) return(lnl) }
either -log likelihood value if all=FALSE
or the entire
list contents of the call to the FORTRAN subroutine if all=TRUE
. The
latter is used from cjs_admb
after optimization to extract the real
parameter estimates at the final beta values.
Jeff Laake
Pledger, S., K. H. Pollock, et al. (2003). Open capture-recapture models with heterogeneity: I. Cormack-Jolly-Seber model. Biometrics 59(4):786-794.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.