-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Refactor]: make use of join functions more consistent #486
Comments
@iantaylor-NOAA - here is the issue regarding joiners. |
`C:\Users\Richard.Methot\Documents\GitHub\StockSynthesis_git\stock-synthesis\SS_benchfore.tpl C:\Users\Richard.Methot\Documents\GitHub\StockSynthesis_git\stock-synthesis\SS_biofxn.tpl C:\Users\Richard.Methot\Documents\GitHub\StockSynthesis_git\stock-synthesis\SS_popdyn.tpl C:\Users\Richard.Methot\Documents\GitHub\StockSynthesis_git\stock-synthesis\SS_selex.tpl JOIN2 C:\Users\Richard.Methot\Documents\GitHub\StockSynthesis_git\stock-synthesis\SS_selex.tpl JOIN3 JOIN C:\Users\Richard.Methot\Documents\GitHub\StockSynthesis_git\stock-synthesis\SS_recruit.tpl C:\Users\Richard.Methot\Documents\GitHub\StockSynthesis_git\stock-synthesis\SS_readcontrol_330.tpl ` |
@Rick-Methot-NOAA, thanks for the additional detail on this issue and sorry for failing to remember this issue and #485 earlier. I think one of the challenging in making a consistent join function is that the units of the dependent variable being joined could differ, from small fractions representing harvest rates or fraction unfished to larger values associated with fish length used in selectivity functions. A large number like 1000 would presumably be more than steep enough for all these cases, but it would be good to see if large numbers cause an impact in parameter estimation by making changes in the likelihood surface more abrupt. |
I think I will start by making all that are <50 be equal to 50. I noticed that 30 was enough to fix the petrale case. |
I created constant joinsteep so I could recompile with a range of options. No obvious sensitivity of overall petrale model results to values of 20, 50, or 200. Next need to compare variance. |
attached find ss_summary from base (3.30.22.1) and from joinsteep=20 and joinsteep=200 and joinsteep=50 I conclude that joinsteep 200 is too extreme and would like to settle on 50. Uncomfortable that all users will see some small numerical differences. |
Refactor request
A user noticed that a forecast result did not match expectation output (see issue #485 ). This is due to the control rule's JOIN not being steep enough, which allows values >1.0 to occur near the transition
The logistic join function is used to smoothly connect two functions without using an IF statement. It is used in double normal selectivity, control rule inflection, hockey stick SRR, and other places.
If the join is not steep enough, then the resultant value of the join can be > 1.0 close to the transition point.
The function shown below is not used universally to achieve the join. It has a very steep transition (1000). Other custom join implementations use 10, 20, 30, 40, 50, 100. 10 is the value in the control rule join:
This should be cleaned up after an evaluation of a good default steepness (suggest 100).
Expected behavior
more consistent code
The text was updated successfully, but these errors were encountered: