R/BPR.R

Defines functions BPR

Documented in BPR

#' @title Biomass-per-Recruit
#'
#' @description Returns biomass-per-Recruit for each iteration.
#'
#'
#' @param Pop.Mod A list containing the components returned by Population.Modeling function (main function).
#' @param f.grid A sequence of fishing efforts.
#' @param Fish.years The number of recent years to estimate the mean of SEL (selectivity).
#' @param Bio.years The number of recent years to estimate the mean of M, W and Mat (natural mortality, weight and maturity).
#' @param Method The procedure to obtain the age vector of weight, natural mortality, selectivity and maturity. By default is "mean" which means that the mean of the last "Bio.years or "Fish.years" is used. The alternative option is "own", the user can introduce these elements.
#' @param par If Method="own" it is a list containing the matrices whose columns report for each iteration the age vector of weight, natural mortality, selectivity and maturity. In other case is equal to NULL.
#' @param plot A vector of two elements. The first one is a logical parameter. By default is equal to TRUE, which means that a biomass per recruit graph is done. The second element refers to which iteration must be plotted.
#' @details The function return the biomass-per-recruit.
#'
#' @return An array whose third dimension corresponds to the iterations. For each iteration the array contains a matrix reporting the biomass-per-recruit for a range of overall fishing mortalities.
#' @author
#' \itemize{
#' \item{Marta Cousido-Rocha}
#' \item{Santiago Cerviño López}
#' }
#' @examples
#' # First we introduce the basic parameters to define the population.
#' # Note that N0 is equal to 10000 individuals, and hence below we are
#' # consistent with this unit when we introduce the biological and
#' # stock-recruitment parameters.
#' ctrPop<-list(years=seq(1980,2020,by=1),niter=2,N0=10000,ages=0:15,minFage=4,
#' maxFage=7,ts=0,tc=0.5,tseed=NULL)
#'
#' # Now, we introduce the biological parameters of the population.
#' # Note that L_inf is in cm, and a and b parameters allow us to relate
#' # the length in cm with the weight in Kg.
#' number_ages<-length(ctrPop$ages);number_years<-length(ctrPop$years)
#' M<-matrix(rep(0.4,number_ages*number_years),ncol = number_years)
#' colnames(M)<-ctrPop$years
#' rownames(M)<-ctrPop$ages
#' ctrBio<-list(M=M,CV_M=0.2, L_inf=124.5, t0=0, k=0.164, CV_L=0.2, CV_LC=0.2, a=4.5*10^(-6), b=3.1049,
#'            a50_Mat=3, ad_Mat=-0.5,CV_Mat=0.2)
#'
#' # We continue introducing the fishing parameters.
#' # Below, we have different objects ctrSEL depending on which selectivity function is used.
#' # Constant selectivity
#' ctrSEL<-list(type="cte", par=list(cte=0.5),CV_SEL=0.2)
#'
#' # Logistic selectivity
#' ctrSEL<-list(type="Logistic", par=list(a50_Sel=1.5, ad_Sel=-1),CV_SEL=0.2)
#'
#' # Gamma selectivity
#' ctrSEL<-list(type="Gamma", par=list(gamma=10,alpha=15, beta=0.03),CV_SEL=0.05)
#'
#' # Andersen selectivity
#' ctrSEL<-list(type="Andersen", par=list(p1=2,p3=0.2,p4=0.2,p5=40),CV_SEL=0.05)
#'
#' f=rep(0.5,number_years)
#' ctrFish<-list(f=f,ctrSEL=ctrSEL)
#'
#' # Finally, we show below the three possible stock recruitment relationship.
#' # The values of the parameters of Beverton-Holt Recruitment Model and Ricker
#' # Recruitment Model are ones suitables when the biomass is measured in Kg and
#' # the recruitment is measured as number of individuals.
#'
#' a_BH=10000; b_BH=400; CV_REC_BH=0.2; a_RK=10; b_RK=0.0002; CV_REC_RK=0.2
#' # If the spawning stock recruiment relationship is constant:
#' SR<-list(type="cte",par=NULL)
#' # If the spawning stock recruitment relationship is Beverton-Holt Recruitment Model:
#' SR<-list(type="BH",par=c(a_BH,b_BH,CV_REC_BH))
#' # If the spawning stock recruitment relationship is Ricker Recruitment Model:
#' SR<-list(type="RK",par=c(a_RK,b_RK,CV_REC_RK))
#'
#' # The following lines allow us to use the described function.
#' Pop.Mod<-Population.Modeling(ctrPop=ctrPop,ctrBio=ctrBio,ctrFish=ctrFish,SR=SR)
#' f.grid<-seq(0.00,0.5,by=0.01)
#' BPR(Pop.Mod,f.grid,3,3,plot=c(TRUE,1),Method="mean",par=NULL)
#'
#'
#' # BPR(Pop.Mod,f.grid,3,3,plot=c(TRUE,1),Method="own",par=list(W=W,Mat=Mat,M=M,s=s))
#' # If par is not NULL must be something like (assuming that W, WC, M,
#' # Mat and SEL are defined previously).
#' # par=list(); par$W<-W; par$SEL<-SEL; par$Mat<-Mat; par$M<-M
#' @export





BPR<-function(Pop.Mod,f.grid,Fish.years,Bio.years,plot,Method,par){
min_age<-Pop.Mod$Info$minFage
max_age<-Pop.Mod$Info$maxFage


N<-Pop.Mod$Matrices$N;ages<-as.numeric(rownames(N))
number_years<-ncol(N)
number_ages<-nrow(N)
niter<-dim(N)[3]

if(is.null(Method)){Method="mean"}
if(is.null(plot)){plot=TRUE}

if(Method=="mean"){
Wt<-Pop.Mod$Matrices$W
Mt<-Pop.Mod$Matrices$M
Matt<-Pop.Mod$Matrices$Mat
st<-(Sum.Pop.Mod(Pop.Mod,c("SEL"))$SEL)

W<-matrix(0,ncol=niter,nrow=number_ages);M<-W;Mat<-W;s<-W
for (ind2 in 1:niter){
W[,ind2]<-apply(Wt[,(number_years-Bio.years+1):number_years,ind2],1,mean)
M[,ind2]<-apply(Mt[,(number_years-Bio.years+1):number_years,ind2],1,mean)
Mat[,ind2]<-apply(Matt[,(number_years-Bio.years+1):number_years,ind2],1,mean)
s[,ind2]<-apply(st[,(number_years-Fish.years+1):number_years,ind2],1,mean)
}
}

if(Method=="own"){
W<-par$W
M<-par$M
Mat<-par$Mat
s<-par$SEL
}

l<-length(f.grid);F.vector<-1:l;bpr.vector<-1:l


R<-array(0, dim=c(l, 2, niter))
for (ind2 in 1:niter){

  a<-1:l
  for (j in 1:l){
    F<-f.grid[j]*s #Now is a vector but later will be a matrix and a mean will be necessary
    F<-matrix(F,ncol=niter)
    Z<-F+M
N<-1
bpr<-0
for (i in 1:(number_ages-1)){

  bpr<-bpr+N*W[i,ind2]*Mat[i,ind2]
  N<-N*exp(-Z[i,ind2])
}

bpr<-bpr+(N*W[number_ages,ind2]*Mat[number_ages,ind2]/(1-exp(-Z[number_ages,ind2])))

bpr.vector[j]<-bpr
F.vector[j]<-mean(F[(min_age-ages[1]+1):(max_age-ages[1]+1),ind2])
}
ind<-which(bpr.vector<0);bpr.vector[ind]<-0
results<-cbind(F.vector,bpr.vector)
colnames(R)<-c("F","BPR")
R[,,ind2]<-results}

if(plot[1]==1){
  graphics::plot(R[,1,plot[2]],R[,2,plot[2]], main="Biomass per recruit",xlab="F (fishing mortality)",ylab="BPR",type="l")
}

return(R)}
IMPRESSPROJECT/ModelingPopulation documentation built on March 21, 2020, 12:14 a.m.