Recruitment after main recdevs but before forecast years

40 views
Skip to first unread message

hans gerritsen

unread,
May 29, 2025, 4:45:27 AMMay 29
to ss3-...@googlegroups.com
Hello SS experts,
I have a stock with very little information of young age classes and want to assume zero recdevs for my last two data years (2022 and 2023)
I set my last year of main recdevs to 2021 but the model still estimates non-zero recdevs for 2022-23 unless I change "lambda for Fcast_recr_like occurring before endyr+1" to a high value. However, if I do that, the uncertainty for recruitment in those years becomes almost zero.
Is there a way to get SS to estimate the uncertainty for the years after the main recdevs in a similar way as it does for the forecast?
image.png
2 #do_recdev:  0=none; 1=devvector (R=F(SSB)+dev); 2=deviations (R=F(SSB)+dev); 3=deviations (R=R0*dev; dev2=R-f(SSB)); 4=like 3 with sum(dev2) adding penalty
2010 # first year of main recr_devs; early devs can preceed this era
2021 # last year of main recr_devs; forecast devs start in following year (do not estimate recruitment for the last 2 years of the assessment)
2 #_recdev phase
1 # (0/1) to read 13 advanced options
-10 #_recdev_early_start (0=none; neg value makes relative to recdev_start)
4 #_recdev_early_phase
0 #_forecast_recruitment phase (incl. late recr) (0 value resets to maxphase+1)
999 #_lambda for Fcast_recr_like occurring before endyr+1 - This is a weird one, it does not estimate zero recdev after main phase if this value is low: "This lambda is for the log likelihood of the forecast recruitment deviations that occur before endyr + 1. Use a larger value here if solitary, noisy data at end of time series cause unruly recruitment deviation estimation.""
1994.2   #_last_early_yr_nobias_adj_in_MPD
2005.5   #_first_yr_fullbias_adj_in_MPD
2020.7   #_last_yr_fullbias_adj_in_MPD
2021 # do not extend after main recdev
0.9751  #_max_bias_adj_in_MPD (1.0 to mimic pre-2009 models)
0 #_period of cycles in recruitment (N parms read below)
-5 #min rec_dev
5 #max rec_dev
0 #_read_recdevs

Ian Taylor - NOAA Federal

unread,
May 29, 2025, 11:56:23 AMMay 29
to hans gerritsen, ss3-...@googlegroups.com
Hello Hans,
Unfortunately it's impossible to both force the late recruitment devs to zero AND provide reasonable estimates of uncertainty about them. If the estimated recdevs are not unreasonable, it may be better to live with the non-zero estimates. If they are implausibly far from zero, then it would be better to fix them at zero and acknowledge that you're not capturing the associated uncertainty.

If you compare all the likelihood components for a model with the devs fixed at zero to one where they are estimated, you could figure out which data sources were pulling the recdevs away from zero and potentially change the treatment of those data to reduce the influence on the recent recruitment. Without knowing more about the model, it's hard to guess what that might look like, however.
-Ian

--
You received this message because you are subscribed to the Google Groups "SS3 - Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ss3-forum+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/ss3-forum/CAHOV%2ByaVCieU6QgD-8urpmOAnEsadcZPhAGzNOW2FJZKk9vzHw%40mail.gmail.com.

Richard Methot - NOAA Federal

unread,
May 29, 2025, 12:10:51 PMMay 29
to SS3 - Forum
Hi Hans,
You can implement Ian's second suggestion by using this control:
-1 #_forecast_recruitment phase (incl. late recr) (0 value resets to maxphase+1)

That will keep the latedevs and the forecast devs at 0.0 and they will show as having zero variance.  You can look at the other likelihood components to see which ones are fit worse when these devs are kept at 0.
Alternatively, given that you do not trust the recruitment signal in the recent data, you could downweight those data rather than upweight the lambda on the latedevs.

Rick


hans gerritsen

unread,
May 29, 2025, 1:47:28 PMMay 29
to SS3 - Forum
Hi both
Thank you for the quick reply. That makes sense. 
I have some (sparse) data on young fish in my age and length compositions of the catch. The only way of downweighing input data on young fish that I can think of is to increase the ageing error on the young fish and not fitting to the length data. That does the trick, now I have to decide if that would be a wise thing to do.
Thanks
recdevs2_withbars.png

Mark Maunder

unread,
May 29, 2025, 2:00:24 PMMay 29
to hans gerritsen, SS3 - Forum

Consider time varying selectivity (or growth) for the fishery (at least in the last couple of years), that might be the underlying reason. Also try retrospective analysis to see if you get the same issues and/or consistent bias.

 

If its caused by just a few odd young fish in the comp data that are not part of a double normal looking length comp distribution, consider deleting just those fish from the data or other approach to down weight them.   

 

From: ss3-...@googlegroups.com <ss3-...@googlegroups.com> On Behalf Of hans gerritsen
Sent: Thursday, May 29, 2025 10:47 AM
To: SS3 - Forum <ss3-...@googlegroups.com>
Subject: Re: [SS3] Recruitment after main recdevs but before forecast years

 

Hi both

Thank you for the quick reply. That makes sense. 

I have some (sparse) data on young fish in my age and length compositions of the catch. The only way of downweighing input data on young fish that I can think of is to increase the ageing error on the young fish and not fitting to the length data. That does the trick, now I have to decide if that would be a wise thing to do.

Thanks

On Thursday, May 29, 2025 at 5:10:51 PM UTC+1 richard...@noaa.gov wrote:

Hi Hans,

You can implement Ian's second suggestion by using this control:

-1 #_forecast_recruitment phase (incl. late recr) (0 value resets to maxphase+1)

 

That will keep the latedevs and the forecast devs at 0.0 and they will show as having zero variance.  You can look at the other likelihood components to see which ones are fit worse when these devs are kept at 0.

Alternatively, given that you do not trust the recruitment signal in the recent data, you could downweight those data rather than upweight the lambda on the latedevs.

 

Rick

 

On Thursday, May 29, 2025 at 8:56:23 AM UTC-7 Ian Taylor wrote:

Hello Hans,

Unfortunately it's impossible to both force the late recruitment devs to zero AND provide reasonable estimates of uncertainty about them. If the estimated recdevs are not unreasonable, it may be better to live with the non-zero estimates. If they are implausibly far from zero, then it would be better to fix them at zero and acknowledge that you're not capturing the associated uncertainty.

 

If you compare all the likelihood components for a model with the devs fixed at zero to one where they are estimated, you could figure out which data sources were pulling the recdevs away from zero and potentially change the treatment of those data to reduce the influence on the recent recruitment. Without knowing more about the model, it's hard to guess what that might look like, however.

-Ian

 

On Thu, May 29, 2025 at 1:45 AM hans gerritsen <hans...@gmail.com> wrote:

Hello SS experts,

I have a stock with very little information of young age classes and want to assume zero recdevs for my last two data years (2022 and 2023)

I set my last year of main recdevs to 2021 but the model still estimates non-zero recdevs for 2022-23 unless I change "lambda for Fcast_recr_like occurring before endyr+1" to a high value. However, if I do that, the uncertainty for recruitment in those years becomes almost zero.

Is there a way to get SS to estimate the uncertainty for the years after the main recdevs in a similar way as it does for the forecast?

Ian Taylor - NOAA Federal

unread,
May 29, 2025, 2:07:57 PMMay 29
to Mark Maunder, hans gerritsen, SS3 - Forum
I like Mark's suggestions. One more thing to try is using wider age and length bins for the small and young fish, or a larger first bin (treated as a minus-group).

Richard Methot - NOAA Federal

unread,
May 29, 2025, 2:16:37 PMMay 29
to Ian Taylor - NOAA Federal, Mark Maunder, hans gerritsen, SS3 - Forum
I'd be concerned that removing young fish from some years will cause a bias.  If those fish occur in earlier years, SS3 will create a selectivity curve to include them at some low level.
If young fish occurrence is sporadic and noisy for all years, then I see merit in removing them from all years such that the estimated selectivity curve will not expect to see them.

Richard  D. Methot Jr.

Stock Assessment Research Scientist (ST)

Northwest Fisheries Science Center

NOAA Fisheries | U.S. Department of Commerce

Office: (425) 666-9893

Mobile: (301) 830-2454

www.fisheries.noaa.gov 




You received this message because you are subscribed to a topic in the Google Groups "SS3 - Forum" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ss3-forum/0lKdOYg0cAk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ss3-forum+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/ss3-forum/CAOUH9r4TUcCcw-PDLoag2mp51-_ea5UjOA_2WSim7hARRcH1yg%40mail.gmail.com.

Mark Maunder

unread,
May 29, 2025, 2:28:41 PMMay 29
to Richard Methot - NOAA Federal, Ian Taylor - NOAA Federal, hans gerritsen, SS3 - Forum

I agree, its probably better to drop them in all years. Depending on what the comp data look like, you might want to also try using a discard function with zero mortality to ensure the selectivity curve is not messed up when dropping them. This assumes that your goal is to take the fish out at approximately the right size and/or use the main component of the length comp distribution to inform the parameters of the model. We just did this for the YFT assessment.   

Reply all
Reply to author
Forward
0 new messages