void model_parameters::init_states(void) { K=mfexp(lnK); halfk = K/2; MSY=mfexp(lnMSY); // calc z, zMSY, and meanP z=(1/(n-1))*pow(n,(n/(n-1))); zMSY=z*MSY; meanP=mean(Pobs); }
void model_parameters::userfunction(void) { obj_fun =0.0; int Gtype, L; FMpar = mfexp(logFM); // estimated F/M SL50 = mfexp(logSL50); Delta = mfexp(logDelta); Vul = 1.0/(1+mfexp(-log(19)*(LenBins-SL50)/Delta)); MkL = Mk * pow(Linf/LenBins, Mpow); FkL = FMpar * Mk * Vul; for (Gtype=1;Gtype<=NGTG;Gtype++) { MKLMat(Gtype) = MkL + kslope*(DiffLinfs(Gtype) - Linf); ZKLMat(Gtype) = MKLMat(Gtype) + FkL; currMkL = MKLMat(Gtype); currZkL = ZKLMat(Gtype); PUnFished = 0; PFished = 0; NUnFished = 0; NFished = 0 ; PUnFished(1) = RecProbs(Gtype); PFished(1) = RecProbs(Gtype); GTGLinf = DiffLinfs(Gtype); for (L=2;L<=NLenMids+1;L++) { if (LenBins(L) < GTGLinf) { PUnFished(L) = PUnFished(L-1) * pow(((GTGLinf-LenBins(L))/(GTGLinf-LenBins(L-1))),currMkL(L-1)); PFished(L) = PFished(L-1) * pow(((GTGLinf-LenBins(L))/(GTGLinf-LenBins(L-1))),currZkL(L-1)); } if (LenBins(L) >= GTGLinf) { PUnFished(L) = 0; PFished(L) = 0; } } for (L=1;L<=NLenMids;L++) { NUnFished(L) = (PUnFished(L) - PUnFished(L+1))/currMkL(L); NFished(L) = (PFished(L) - PFished(L+1))/currZkL(L); } UnfishedMatrix(Gtype) = NUnFished; FishedMatrix(Gtype) = NFished; EP0_gtg(Gtype) = sum(elem_prod(NUnFished, Fec)); EPf_gtg(Gtype) = sum(elem_prod(NFished, Fec)); } EP0 = sum(EP0_gtg); EPf = sum(EPf_gtg); SPR = EPf/EP0; PredUnfishedComp = colsum(UnfishedMatrix); PredUnfishedComp = PredUnfishedComp/sum(PredUnfishedComp); PredLenComp = colsum(FishedMatrix); PredLenComp = elem_prod(PredLenComp, 1.0/(1+mfexp(-log(19)*(LenMids-SL50)/Delta))); PredLenComp = PredLenComp/sum(PredLenComp); SL95 = SL50 + Delta; obj_fun = -sum(elem_prod(ObsLength, log(elem_div(PredLenComp+0.00000001,ObsLength+0.00000001)))); // AP from ADMB living doc }
void model_parameters::initialization(void) { NAreaAge.initialize(); CatchAreaAge.initialize(); CatchNatAge.initialize(); Nage(1,1) = So*Bo/(1+beta*Bo); for(int i=sage+1 ; i <= nage ; i++) { Nage(1,i) = Nage(1,i-1) * mfexp(-za(i-1)); } VulB(1) = elem_prod(elem_prod(Nage(1),va),wa); SB(1) = elem_prod(Nage(1),fa)*wa/2; tBo = Nage(1)*wa; calcmaxpos(tBo); varPos = maxPos*cvPos; PosX(1) = minPos + (maxPos - minPos) * (0.5+0.5*sin(indmonth(1)*PI/6 - mo*PI/6)); VBarea(1,sarea) = VulB(1)* (cnorm(areas(sarea)+0.5,PosX(1),varPos)); for(int r=sarea+1 ; r <= narea-1 ; r++) { VBarea(1,r) = VulB(1)* (cnorm(areas(r)+0.5,PosX(1),varPos)-cnorm(areas(r)-0.5,PosX(1),varPos)); NAreaAge(1)(r) = elem_prod(Nage(1)(sage,nage),(cnorm(areas(r)+0.5,PosX(1),varPos)-cnorm(areas(r)-0.5,PosX(1),varPos))); } //VBarea(1,narea) = VulB(1)* (1.0-cnorm(areas(narea)-0.5,PosX(1),varPos)); NationVulB(1,1) = sum(VBarea(1)(sarea,sarea+nationareas(1)-1)); NationVulB(1,2) = sum(VBarea(1)(sarea+nationareas(1),narea)); dvar_vector tmp1(sarea,narea); dvar_vector tmp2(sarea,narea); dvar_vector tmp3(sarea,narea); for(int rr= sarea; rr<=narea; rr++) { tmp1(rr)= VBarea(1)(rr)/ (NationVulB(1)(indnatarea(rr)) + 0.0001); tmp2(rr) = tmp1(rr)*TotEffyear(indnatarea(rr))(indyr(1)); Effarea(1)(rr) = tmp2(rr)*TotEffmonth(indnatarea(rr))(indmonth(1)); } for(int a= sage; a<= nage;a++) { dvar_vector propVBarea(sarea,narea); for(int rr =sarea; rr<=narea; rr++) { propVBarea(rr) = (cnorm(areas(rr)+0.5,PosX(1),varPos)-cnorm(areas(rr)-0.5,PosX(1),varPos))(a-sage+1); CatchAreaAge(1)(rr)(a) = q*Effarea(1)(rr)*va(a)/(q*Effarea(1)(rr)*va(a)+m)*(1-mfexp(-(q*Effarea(1)(rr)*va(a)+m)))*NAreaAge(1)(rr)(a); CatchNatAge(1)(indnatarea(rr))(a) += CatchAreaAge(1)(rr)(a); EffNatAge(indnatarea(rr))(1)(sage-2) = 1; EffNatAge(indnatarea(rr))(1)(sage-1) = indnatarea(rr); EffNatAge(indnatarea(rr))(1)(a) += Effarea(1)(rr)*propVBarea(rr); } //cout<<"propVBarea "<<propVBarea<<endl; //cout<<"Effarea(1) "<<Effarea(1)<<endl; Effage(1)(a) = Effarea(1)* propVBarea; } }
const T coefficients(const T &x, const T &sel_coeffs) { int x1 = x.indexmin(); int x2 = x.indexmax(); int y2 = sel_coeffs.indexmax(); T y(x1,x2); for ( int i = x1; i < y2; i++ ) { //y(i) = exp(sel_coeffs(i)) / (1.0 + exp(sel_coeffs(i))); y(i) = mfexp(sel_coeffs(i)); } //y(y2,x2) = exp(sel_coeffs(y2)) / (1.0 + exp(sel_coeffs(y2))); y(y2,x2) = mfexp(sel_coeffs(y2)); return y; }
LRGS::LRGS(sLRGSdata& data,sLRGSparameters& pars) { cout<<"The other constructor"<<endl; m_syr = data.syr; m_nyr = data.nyr; m_agek = data.agek; m_ct = data.ct; m_it = data.it; m_bo = mfexp(pars.log_bo); m_h = pars.h; m_s = pars.s; m_sig = sqrt(1.0/mfexp(pars.log_sigma)); m_tau = sqrt(1.0/mfexp(pars.log_tau)); m_wt = pars.wt; }
inline const T plogis(const T &x, const T2 &mean, const T2 &sd) { //typedef typename logisticTrait<T>::plogisT plogisT; T selex = T2(1.0)/(T2(1.0)+mfexp(-(x-mean)/sd)); //selex /= selex(selex.indexmax()); return selex; }
void model_parameters::preliminary_calculations(void) { admaster_slave_variable_interface(*this); int X; double pi = 3.14159265358979323844; MatDelta = L95 - L50; Mat = 1.0/(1+mfexp(-log(19)*(LenMids-L50)/MatDelta)); Fec = elem_prod(Mat, pow(LenMids, FecB)); Fec = Fec/max(Fec); SDLinf = CVLinf * Linf; LinfdL = ((Linf + MaxSD * SDLinf) - (Linf - MaxSD * SDLinf))/(NGTG-1); for (X=0;X<NGTG;X++) { DiffLinfs(X+1) = (Linf - MaxSD * SDLinf) + X * LinfdL; } RecProbs = 1/(sqrt(2*pi*SDLinf*SDLinf)) * mfexp(-(elem_prod((DiffLinfs-Linf),(DiffLinfs-Linf)))/(2*SDLinf*SDLinf)); RecProbs = RecProbs/sum(RecProbs); cout << "damnit" << endl; }
dvar_vector model_parameters::calcmaxpos(const dvariable& tb) { int pp = tb > 0.5*tBo?1:2; //cout<<"tb "<<tb<<endl; //cout<<"0.7tBo "<<0.7*tBo<<endl; //cout<<"pp "<<pp<<endl; switch (pp) { case 1: maxPos(sage,nage) = 1./(1.+mfexp(-(age-maxPos501)/maxPossd1)); maxPos(sage,nage) *= (narea-sarea); maxPos(sage,nage) += sarea; cout<<"high B"<<endl; break; case 2: maxPos(sage,nage) = 1./(1.+mfexp(-(age-maxPos502)/maxPossd2)); maxPos(sage,nage) *= (narea-sarea); maxPos(sage,nage) += sarea; cout<<"low B"<<endl; break; } return(maxPos); }
const T nonparametric(const T &x, const T &selparms) { int x2 = x.indexmax(); dvar_vector selex(1,x2); for ( int i = 1; i <= x2; i++ ) { //selex(i) = 1.0 / (1.0 + mfexp(-selparms(i))); //selex(i) = mfexp(selparms(i)) / (1.0 + mfexp(selparms(i))); selex(i) = mfexp(selparms(i)); } //dvariable temp = selex(x2); dvariable temp = max(selex); //selex /= temp; return selex; }
dvariable mult_likelihood(const dmatrix &o, const dvar_matrix &p, dvar_matrix &nu, const dvariable &log_vn) { // kludge to ensure observed and predicted matrixes are the same size if(o.colsize()!=p.colsize() || o.rowsize()!=p.rowsize()) { cerr<<"Error in multivariate_t_likelihood, observed and predicted matrixes" " are not the same size\n"; ad_exit(1); } dvariable vn = mfexp(log_vn); dvariable ff = 0.0; int r1 = o.rowmin(); int r2 = o.rowmax(); int c1 = o.colmin(); int c2 = o.colmax(); for(int i = r1; i <= r2; i++ ) { dvar_vector sobs = vn * o(i)/sum(o(i)); //scale observed numbers by effective sample size. ff -= gammln(vn); for(int j = c1; j <= c2; j++ ) { if( value(sobs(j)) > 0.0 ) ff += gammln(sobs(j)); } ff -= sobs * log(TINY + p(i)); dvar_vector o1=o(i)/sum(o(i)); dvar_vector p1=p(i)/sum(p(i)); nu(i) = elem_div(o1-p1,sqrt(elem_prod(p1,1.-p1)/vn)); } // exit(1); return ff; }
// Half normal. // Order of detpars: g0, sigma. dvariable detfn_hn (double x, const dvar_vector &detpars, dvariable ss_resid) { return detpars(1)*mfexp(-square(x)/(2*square(detpars(2)))); }
// Log-link threshold. // Order of detpars: shape1, shape2, scale. dvariable detfn_logth (double x, const dvar_vector &detpars, dvariable ss_resid) { return 0.5 - 0.5*(2*cumd_norm((detpars(1) - mfexp(detpars(2) - detpars(3)*x))*pow(2,0.5)) - 1); }
// Hazard rate. // Order of detpars: g0, sigma, z. dvariable detfn_hr (double x, const dvar_vector &detpars, dvariable ss_resid) { return detpars(1)*(1 - mfexp(-pow(x/detpars(2),-detpars(3)))); }
void model_parameters::move_grow_die(void) { dvariable tB; for(int i=2;i<=ntstp;i++) { //if(i>12)exit(1); switch (indmonth(i)) { case 1: Nage(i)(sage) = (So*SB(i-nmon)/(1.+beta*SB(i-nmon)))*mfexp(wt(indyr(i))*err); for(int a = sage+1;a<=nage;a++) { Nage(i)(a) = Nage(i-1)(a-1)*mfexp(-(m+q*Effage(i-1)(a-1)*va(a-1))/12); } break; default: Nage(i) = elem_prod(Nage(i-1),mfexp(-(m+q*elem_prod(Effage(i-1),va))/12)); break; } VulB(i) = elem_prod(elem_prod(Nage(i),va),wa); SB(i) = elem_prod(Nage(i),fa)*wa/2; maxPos.initialize(); tB = Nage(i)*wa; calcmaxpos(tB); //cout<<"maxPos "<<maxPos<<endl; varPos = maxPos*cvPos; PosX(i) = minPos + (maxPos - minPos) * (0.5+0.5*sin(indmonth(i)*PI/6 - mo*PI/6)); VBarea(i,sarea) = VulB(i)* (cnorm(areas(sarea)+0.5,PosX(i),varPos)); for(int r = sarea+1;r <= narea;r++) { VBarea(i)(r) = VulB(i)* (cnorm(areas(r)+0.5,PosX(i),varPos)-cnorm(areas(r)-0.5,PosX(i),varPos)); NAreaAge(i)(r) = elem_prod(Nage(i)(sage,nage),(cnorm(areas(r)+0.5,PosX(i),varPos)-cnorm(areas(r)-0.5,PosX(i),varPos))); } //VBarea(i,narea) = VulB(i)* (1.0-cnorm(areas(narea)-0.5,PosX(i),varPos)); NationVulB(i,1) = sum(VBarea(i)(sarea,sarea+nationareas(1)-1)); NationVulB(i,2) = sum(VBarea(i)(sarea+nationareas(1),narea)); dvar_vector tmp1(sarea,narea); dvar_vector tmp2(sarea,narea); for(int rr= sarea; rr<=narea; rr++) { tmp1(rr)= VBarea(i)(rr)/ (NationVulB(i)(indnatarea(rr)) + 1); tmp2(rr) = tmp1(rr)*TotEffyear(indnatarea(rr))(indyr(i)); Effarea(i)(rr) = tmp2(rr)*TotEffmonth(indnatarea(rr))(indmonth(i)); } for(int a = sage; a<=nage;a++) { dvar_vector propVBarea(sarea,narea); for(int rr =sarea; rr<=narea; rr++) { propVBarea(rr) = (cnorm(areas(rr)+0.5,PosX(i),varPos)-cnorm(areas(rr)-0.5,PosX(i),varPos))(a-sage+1); EffNatAge(indnatarea(rr))(i)(sage-2) = i; EffNatAge(indnatarea(rr))(i)(sage-1) = indnatarea(rr); EffNatAge(indnatarea(rr))(i)(a) += Effarea(i)(rr)* propVBarea(rr); } //cout<<"propVBarea "<<propVBarea<<endl; //cout<<"Effarea(1) "<<Effarea(1)<<endl; Effage(i)(a) = Effarea(i)*propVBarea; } for(int r = sarea+1;r <= narea-1;r++) { for(int a = sage; a<=nage;a++) { CatchAreaAge(i)(r)(a) = q*Effarea(i)(r)*va(a)/(q*Effarea(i)(r)*va(a)+m)*(1-mfexp(-(q*Effarea(i)(r)*va(a)+m)))*NAreaAge(i)(r)(a); CatchNatAge(i)(indnatarea(r))(a)+= CatchAreaAge(i)(r)(a); } } } }
const T logSelexMeanOne(const T &x) const { T y = log(gsm::coefficients(x, this->GetSelCoeffs())); y -= log(mean(mfexp(y))); return y; }
const T logSelexMeanOne(const T &x) const { T y = log(gsm::pdubnorm<T>(x, this->GetSL(), this->GetS50(), this->GetSR())); y -= log(mean(mfexp(y))); return y; }
const T logSelexMeanOne(const T &x) const { T y = log(gsm::plogis95<T>(x, this->GetS50(), this->GetS95())); y -= log(mean(mfexp(y))); return y; }
const T logSelexMeanOne(const T &x) const { T y = log(gsm::plogis(x, this->GetMean(), this->GetStd())); y -= log(mean(mfexp(y))); return y; }