Forums

Back

growth CV parameterization

DF
Dan Fu, modified 3 Years ago.

growth CV parameterization

Youngling Posts: 46 Join Date: 12/14/16 Recent Posts

Dear SS team,

I am trying to understand how SS3 parameterise the CV / variance of the growth curve. For example, the following parameter lines (from one of our assessment)

are able to achieve of CV of 0.2 for the initial age and decreased to 0.1 for the maximum age/length ( confirmed by the model output) :

 

2 # GrowthModel: 1=vonBert with L1&L2; 2=Richards with L1&L2; 3=age_specific_K_incr; 4=age_specific_K_decr; 5=age_specific_K_each; 6=NA; 7=NA; 8=growth cessation
0 #_Age(post-settlement)_for_L1;linear growth below this
999 #_Growth_Age_for_L2 (999 to use as Linf)
...
0.1 #_SD_add_to_LAA (set to 0.1 for SS2 V1.x compatibility)
1 #_CV_Growth_Pattern:  0 CV=f(LAA); 1 CV=F(A); 2 SD=F(LAA); 3 SD=F(A); 4 logSD=F(A)
0 #_hermaphroditism option:  0=none; 1=female-to-male age-specific fxn; -1=male-to-female age-specific fxn
3 #_parameter_offset_approach (1=none, 2= M, G, CV_G as offset from female-GP1, 3=like SS2 V1.x)
#_growth_parms
# Sex: 1  BioPattern: 1  Growth
 -30 30 5.89629 20 100 6 -5 0 0 0 0 0.5 0 0 # L_at_Amin_Fem_GP_1
 50 100 70.3509 70.2 100 6 -5 0 0 0 0 0.5 0 0 # L_at_Amax_Fem_GP_1
 -3 3 0.34809 0.373 100 6 -1 0 0 0 0 0.5 0 0 # VonBert_K_Fem_GP_1
 0 5 2.9096 1 1 0 -5 0 0 0 0 0 0 0 # Richards_Fem_GP_1 

0.01 60 0.2 0.2 100 6 -5 0 0 0 0 0.5 0 0 # CV_young_Fem_GP_1
 -3 3 -0.69 -0.69 100 6 -5 0 0 0 0 0.5 0 0 # CV_old_Fem_GP_1

 

I am very confused as to how the last line is able to achieve the CV of 0.1 for the maximum age/length by specifying an initial value  -0.69.

What value should I use, for example, if I want to achieve a CV of 0.15 for the maximum age/length?

 

Your help/explanation  would be much appreciated.

Dan

 

 

DF
Dan Fu, modified 3 Years ago.

RE: growth CV parameterization

Youngling Posts: 46 Join Date: 12/14/16 Recent Posts

For a quick correction:  In above example, the "_CV_Growth_Pattern" should be  0 #CV=f(LAA), not 1

 

Richard Methot, modified 3 Years ago.

RE: growth CV parameterization

Youngling Posts: 219 Join Date: 11/24/14 Recent Posts
Dan,
Here is the code that does the CV calculation from input parameters.  Input parameters are in MGparm(), and gp==1 means female, else male.  I highlighted and added a note to the relevant line.
I haven't looked at this section of code in a very long time.  The label "3=like SS2 V1.x)" certainly deserves an update!
CV=F(LAA) is a superior option to CV=F(A) because it avoids a strange situation in which CV is changing but mean size is not.
The CAPAM workshop on growth modeling had some discussion on the merits of some alternatives to modeling variability of growth.  It concluded that one should avoid situations in which the resultant std.dev. of L@A would decrease with age.
However, I can envision one circumstance in which the apparent std.dev. would decrease. That is when there is enough temporal spread in the birthdate/settlement date of the recruits such that a given point in time the early borne recruits are larger than the late born recruits so there is a large std.dev. of length at their nominal age (which assumes they all have the same birthdate).  But all recruits are growing towards the same Linf, so their std.dev. could decline as they age.  I think it would be cool if someone could demonstrate this phenomenon using SS' ability to divide the total recruits among settlement events with different settlement dates.

         j=Ip+N_M_Grow_parms-2;  // index for CVmin
        k=j+1;  // index for CVmax
       switch(MGparm_def)    // for CV of size-at-age
          {
            case 1:  // direct
            {
            if(MGparm(j)>0)
              {CVLmin(gp)=MGparm(j);} else {CVLmin(gp)=MGparm(N_M_Grow_parms-1);}
            if(MGparm(k)>0)
              {CVLmax(gp)=MGparm(k);} else {CVLmax(gp)=MGparm(N_M_Grow_parms);}
            break;
            }
            case 2:  // offset
            {
            if(gp==1)
              {CVLmin(gp)=MGparm(j); CVLmax(gp)=MGparm(k);}
            else
              {CVLmin(gp)=CVLmin(1)*mfexp(MGparm(j)); CVLmax(gp)=CVLmax(1)*mfexp(MGparm(k));}
            break;
            }
            case 3:  // offset like SS2 V1.23
            {
            if(gp==1)
              {CVLmin(gp)=MGparm(j); CVLmax(gp)=CVLmin(1)*mfexp(MGparm(k));}   // THIS LINE IS DOING THE CALCULATION IN YOUR CASE
            else
              {CVLmin(gp)=CVLmin(1)*mfexp(MGparm(j)); CVLmax(gp)=CVLmin(gp)*mfexp(MGparm(k));}
            break;
            }
          }  // end switch
Richard D. Methot Jr. Ph.D.
NOAA Fisheries Senior Scientist for Stock Assessments
Mobile: 301-787-0241


On Fri, Aug 7, 2020 at 3:23 AM Dan Fu <VLab.Notifications@noaa.gov> wrote:

For a quick correction:  In above example, the "_CV_Growth_Pattern" should be  0 #CV=f(LAA), not 1

 


--
Dan Fu Stock Synthesis Virtual Lab Forum https://vlab.noaa.gov/web/stock-synthesis/public-forums/-/message_boards/view_message/11055300 VLab.Notifications@noaa.gov
IT
Ian Taylor, modified 3 Years ago.

RE: growth CV parameterization

Youngling Posts: 117 Join Date: 12/8/14 Recent Posts

Hi Dan,

For graphical illustrations of the different parameterizations of variability in length-at-age in SS, see slides 9-14 of this powerpoint from the 2014 CAPAM Growth Workshop: https://github.com/iantaylor-NOAA/SSgrowth/blob/master/Modeling%20growth%20in%20SS.pptx?raw=true.

-Ian

DF
Dan Fu, modified 3 Years ago.

RE: growth CV parameterization

Youngling Posts: 46 Join Date: 12/14/16 Recent Posts

Hi Rick and Ian, thanks a lot for the explanation (and the extra material). Now I understand how the CV is calculated in my case.

I will need to think a bit more about your comments related to multiple recruitment events leading to decreasing std.dev.

 

Cheers,

Dan