knitr::opts_chunk$set(echo = TRUE)

The vignette estimates the rate of fish migration between two areas from tag returns using a catch conditioned modification of @Hilborn1990movement.

Methods

The model simulated two areas 1 and 2, and followed an annual sequence of tag release with release mortality in area 1, then application of tag shedding, half of natural mortality and removal of recaptures by fishing in both areas, fish movement from area 1 to area 2, and finally application of the second half of natural mortality to the remaining numbers of tagged fish.

We assumed that tagged and released fish $relT_{1,y}$ in area 1 at the start of year $y$ were subject to tag-release mortality ($\phi$) such that available tags $T_{1,y}$:

$$T_{1,y}= relT_{1,y} * (1-\phi)$$

Each year, tag-shedding $s$ and half of annual natural mortality $M$ were applied first to all available tags in an area $r$:

$$T_{r,y} = T_{r,y} * (1-\lambda)*exp(-0.5M)$$

before fishing removed recaptures $Rec$ from the population of tagged fish:

$$T_{r,y} = T_{r,y} - Rec_{r,y} = T_{a,y}-\frac{T_{r,y}*C_{r,y}}{B_{r,y}}$$

where $C_{r,y}$ is the catch in numbers and $B_{r,y}$ is the vulnerable population size in numbers. After fishing, the number of tagged fish $T_move$ that moved from area 1 to area 2 was given by:

$$T_{move} = move*T_{1,y}$$

where $move$ is the annual movement rate. The number of tagged fish in area 1 and area 2 were then updated:

$$T_{1,y} = T_{1,y} - T_{move}$$

$$T_{2,y} = T_{2,y} - T_{move}$$

Finally, the second half of annual natural mortality $M$ was applied:

$$T_{r,y} = T_{r,y}*exp(-0.5M)$$

Since fishing occurred in the simulations before movement, no tagged fish were recaptured within-season in area 2 from tags released in area 1. Annual cohorts of tag-releases were treated separately in the simulation. Movement rate was estimated by minimising the negative multinomial log likelihood of observed and expected numbers of recaptures in either area 1, area 2, or both.

Simulation

The model is demonstrated using simulated data

Load the migrate package

library(migrate)

Specify the parameters used in the model

yrs <- 2007:2015
relT <- rep( 1000, length(yrs))
# Annual Tag loss rate (for single-tag model) 
tagloss <- rep(0.006, length(yrs))  
# Natural Mortality
M <- 0.155
# Release mortality
relM <- 0.1
# Proportion of fish that migrate
true_move   <- 0.01     
# Catch
C1 <- rep(10000, length(yrs))   
C2 <- rep(10000, length(yrs))
# Abundance in the two areas
B1 <- rep(1000000, length(yrs)) 
B2 <- rep(1000000, length(yrs))

Define some matrices to store the tags available and the recaptures

# T: Number of tags available in Areas 1 and 2 (after half of M)
T1 <- T2    <- matrix(0,nrow=length(yrs),ncol=length(yrs),dimnames=list(yrs,yrs))
# Number of tags being recaptured
R1 <- R2 <- T1
# Number of tags moving
T_move <- T1

Test: Apply tag releases, release M, half of M, remove & store recaptures, estimate and do movement

for (x in 1:length(yrs)) {
  # Release tags
    T1[x,x] <- relT[x]      
    # Apply release mortality
    T1[x,x] <- (1-relM) * T1[x,x]       
    for (y in x:length(yrs)) {          
            # Available Tags after applying 0.5 M
            T1[x,y] <- T1[x,y] * exp(-0.5*M)
            T2[x,y] <- T2[x,y] * exp(-0.5*M)             
            # Tagloss rate
            T1[x,y] <- T1[x,y] * exp(-tagloss[y])                
            T2[x,y] <- T2[x,y] * exp(-tagloss[y])
            # Recaptures (by Petersen)
            R1[x,y] <- rbinom(n=1,size=round(T1[x,y],0),prob=C1[y]/B1[y])   
            R2[x,y] <- rbinom(n=1,size=round(T2[x,y],0),prob=C2[y]/B2[y])   
            if((y+1) <= length(yrs)) {              # Prevent error
                T_move[x,y+1]   <- (T1[x,y] - R1[x,y])*true_move            # Movement after removals [= T*move*(1-move)**(y-x-1)]
                T1[x,y+1]   <- T1[x,y] - R1[x,y] - T_move[x,y+1]    # = T*(1-move)**(y-x)
                T2[x,y+1]   <- T2[x,y] - R2[x,y] + T_move[x,y+1]    # = 1-T*(1-move)**(y-x)
            }
            T1[x,y]     <- T1[x,y] * exp(-0.5*M)    # Apply 0.5 M - do not apply so T1&T2 remains mid-season numbers
            T2[x,y]     <- T2[x,y] * exp(-0.5*M)    # 
    }
}

Examine the matrices of tags for the two areas

T1
T2

Examine the matrices of recaptures for the two areas

R1
R2

Define the parameters

obs <- list(yrs=yrs,relT=relT,R1=R1,R2=R2,prec1=C1/B1,
            prec2=C2/B2,M=M,relM=relM,tagloss=tagloss)
para <- logitT(c(move=0.011694))    # move

Now fit to the simulated data using the least squares method

fit_ls <- move_sim(obs,para,rfit="R2",lltype="prop")

Print the results

cbind(Est=ilogitT(fit_ls$coef),
        Lwr=ilogitT(fit_ls$coef-2*fit_ls$coef.se),
        Upr=ilogitT(fit_ls$coef+2*fit_ls$coef.se))

Now fit to the simulated data using the maximum likelihood method

fit_ml <- move_sim(obs,para,rfit="R2",lltype="multinom")

Print the results

cbind(Est=ilogitT(fit_ml$coef),
        Lwr=ilogitT(fit_ml$coef-2*fit_ml$coef.se),
        Upr=ilogitT(fit_ml$coef+2*fit_ml$coef.se))

References



AustralianAntarcticDivision/migrate documentation built on May 20, 2019, 2:41 p.m.