class: center, middle, inverse, title-slide .title[ # {FIMS} and {ecosystemom}:
Integrating Ecosystem Information into
Stock Assessment ] .author[ ###
Bai Li
] .author[ ### Contractor with ECS Federal LLC in support of
NOAA Fisheries Office of Science and Technology ] .institute[ ### State University of New York at Stony Brook | Chen Lab ] .date[ ### 2026/09/30 ] --- layout: true <style> .progress-bar { position: fixed; left: 0; right: 0; bottom: 0; height: 8px; background-color: #0085CA; z-index: 100; } .left-wide { width: 65%; float: left; } .right-narrow { width: 30%; float: right; } </style> .footnote[U.S. Department of Commerce | National Oceanic and Atmospheric Administration | National Marine Fisheries Service] --- # About Me - Education - B.S. in Marine Resources, Shanghai Ocean University, 2012 - B.S. in Marine Biology, University of Maine, 2013 - Ph.D. in Marine Biology,University of Maine, 2018 - Research and career - Postdoctoral Researcher, NOAA Fisheries Office of Science and Technology (2019 - 2020): Compared four age-structured stock assessment platforms developed by NOAA Fisheries - Research Software Engineer, ECS Federal LLC in support of NOAA Fisheries Office of Science and Technology (2020 - Present) - Current work: - Develop open-source software for next-generation stock assessment - Conduct interdisciplinary research on holistic fisheries assessment --- # Outline - {FIMS} - Why was Fisheries Integrated Modeling System (FIMS) Created - FIMS Mission Statement - Who is involved in FIMS - FIMS organizations - Model Family Architecture - {ecosystemom} - Single-Species Advice in Dynamic Ecosystems - Overview of {ecosystemom} - End-to-End Simulation Case Study - Lessons Learned: Surveys, Natural Mortality, and Environmental Drivers - Future Directions --- # Why was Fisheries Integrated Modeling System (FIMS) Created <ul> <li>FIMS was created, according to its Terms of Reference, to increase the pool of developers, designers, and testers that contribute to a commonly-used stock assessment modeling system that can be used across regions.</li><br><li>The commitment to build FIMS was made by the National Marine Fisheries Service (NMFS) Science Board in 2020 partly in response to the Center for the Advancement of Population Assessment Methodology (CAPAM) workshop on Next Generation Models and the recommendations in Implementing a Next Generation Stock Assessment Enterprise, a NOAA Fisheries strategic document that calls for the development of general modeling platforms that facilitate ease of use, robust testing, modular applications, and best practices and to improve the professionalism of model development.</li><br> </ul> <img src="static/FIMS_hexlogo.png" style="float: right; width: 80%; max-width: 100px; margin-right: 10%;" /> .footnote[ FIMS slides reused from Kelli Johnson’s .hyperlink-style[[presentation](https://noaa-fims.github.io/presentations/slides_20260421_background.html#1)].<br> ] --- # FIMS Mission Statement <iframe src="https://noaa-fims.github.io/about/" width="100%" height="400px" data-external="1"></iframe> --- # Who is involved in FIMS - .hyperlink-style[[FIMS Implementation Team](https://noaa-fims.github.io/contact/contributors.html#core-developers)] - Dedicated Project Lead (currently Kelli Johnson) - 2 Scientists from each of the 6 Science Centers - Members of the Office of Science and Technology's National Stock Assessment Program - Rotation is encouraged to spread knowledge - .hyperlink-style[[FIMS Council](https://noaa-fims.github.io/contact/contributors.html#fims-council)] - Members from the academic community and global partners - One-year terms if desired - Support from the National Marine Fisheries Service Science Board, the senior leadership team --- # FIMS Organization ### One 🏠 for code, conversation, and collaboration Everything for FIMS lives in one shared place, making it easy to find the code, follow discussions, and jump in. **Explore the GitHub organization** 1. .hyperlink-style[https://github.com/NOAA-FIMS] stores many repositories 2. 🔍 Find code, issues, and discussions in one search 3. Trace decisions from .hyperlink-style[[Discussions](https://github.com/orgs/NOAA-FIMS/discussions)] → Issues → Pull Requests 4. 🚀 Reuse solutions across teams and repositories 5. 🤝 Onboard contributors faster with shared context 6. .hyperlink-style[https://noaa-fims.github.io] --- # Model Family Architecture <div style="margin-bottom:-28px;"></div>
--- # Single-Species Advice in Dynamic Ecosystems - Single-species assessments remain central to tactical fisheries-management advice worldwide - Current testing frameworks often suggest robust performance when using single-species operating models (OMs) - Real-world fish stocks inhabit dynamic oceans driven by environmental forcing and changing trophic interactions - The key gap is integration, i.e., connecting ecosystem models to tactical stock assessment tools <img src="static/single_species_advice_in_dynamic_ecosystems.jpg" width="50%" style="display: block; margin: auto;" /> .footnote[ Figure generated by Gemini 3.6, Google, September 2026 ] --- # Overview of {ecosystemom} A flexible ecosystem-to-stock-assessment simulation framework within the open-source .hyperlink-style[[NOAA-FIMS GitHub organization](https://noaa-fims.github.io/)] -- - 🔍 Explore ecosystem-informed stock assessment approaches -- - 🤝 Create interdisciplinary research and collaboration opportunities -- - 💻 Operating models (OMs) and estimation models (EMs) .pull-left-75[ <u>__OM support__</u> <div style="display: flex; align-items: flex-end; justify-content: space-evenly; text-align: center; margin-top: 20px;"> <!-- Logo 1 --> <div style="display: flex; flex-direction: column; align-items: center;"> <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/d/d6/EwE6Logo_Transparent.png/250px-EwE6Logo_Transparent.png" height="90px" alt="EwE Logo" /> <span style="margin-top: 10px; font-weight: bold;">Ecopath with Ecosim (EwE)</span> </div> <!-- Logo 2 --> <div style="display: flex; flex-direction: column; align-items: center;"> <img src="https://avatars.githubusercontent.com/u/43390982?s=200&v=4" height="90px" alt="Atlantis Logo" /> <span style="margin-top: 10px; font-weight: bold;">Atlantis</span> </div> <!-- Logo 3 --> <div style="display: flex; flex-direction: column; align-items: center;"> <img src="https://noaa-edab.github.io/Rpath/logo.png" height="90px" alt="Rpath Logo" /> <span style="margin-top: 10px; font-weight: bold;">Rpath</span> </div> </div> ] -- .pull-right-25[ <u>__EM support__</u> <!-- Logo 1 --> <div style="display: flex; flex-direction: column; align-items: center;"> <img src="https://noaa-fims.github.io/FIMS/logo.png" height="90px" alt="FIMS Logo" /> <span style="margin-top: 10px; font-weight: bold;">FIMS</span> </div> ] .clear[] .footnote[ [1] .hyperlink-style[[FIMS Website: https://noaa-fims.github.io/FIMS/](https://noaa-fims.github.io/FIMS/)]<br> [2] .hyperlink-style[[ecosystemom Website: https://noaa-fims.github.io/ecosystemom/](https://noaa-fims.github.io/ecosystemom/)] ] --- # Overview of {ecosystemom} - `load_model()`: Import and standardize outputs from ecosystem OMs -- - `get_truth()`: Extract “true” population quantities from OMs <table class="table" style="font-size: 14px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> species_name </th> <th style="text-align:left;"> truth_label </th> <th style="text-align:left;"> truth_type </th> <th style="text-align:left;"> truth_time_step </th> <th style="text-align:left;"> truth_om </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> menhaden </td> <td style="text-align:left;"> biomass </td> <td style="text-align:left;"> index </td> <td style="text-align:left;"> yearly </td> <td style="text-align:left;"> <tibble [33 × 3]> </td> </tr> <tr> <td style="text-align:left;"> menhaden </td> <td style="text-align:left;"> catch </td> <td style="text-align:left;"> index </td> <td style="text-align:left;"> yearly </td> <td style="text-align:left;"> <tibble [33 × 3]> </td> </tr> <tr> <td style="text-align:left;"> menhaden </td> <td style="text-align:left;"> catch </td> <td style="text-align:left;"> agecomp </td> <td style="text-align:left;"> yearly </td> <td style="text-align:left;"> <tibble [231 × 4]> </td> </tr> <tr> <td style="text-align:left;"> menhaden </td> <td style="text-align:left;"> fishing_mortality </td> <td style="text-align:left;"> index </td> <td style="text-align:left;"> yearly </td> <td style="text-align:left;"> <tibble [33 × 3]> </td> </tr> <tr> <td style="text-align:left;"> menhaden </td> <td style="text-align:left;"> natural_mortality </td> <td style="text-align:left;"> agecomp </td> <td style="text-align:left;"> yearly </td> <td style="text-align:left;"> <tibble [231 × 4]> </td> </tr> <tr> <td style="text-align:left;"> menhaden </td> <td style="text-align:left;"> numbers </td> <td style="text-align:left;"> agecomp </td> <td style="text-align:left;"> yearly </td> <td style="text-align:left;"> <tibble [231 × 4]> </td> </tr> </tbody> </table> -- - `sample_*()`: Generate sampled observations from OM outputs for use in fisheries stock assessment models such as FIMS -- - `create_dsem_inputs()`: Prepare environmental covariates or diet-composition data from the OM to support candidate model specifications for dynamic structural equation models (DSEMs) --- # End-to-End Simulation Case Study - Ecosystem: Northwest Atlantic EwE Ecosim model (Adapted from Chagaris et al., 2020) - Focal stock: Atlantic menhaden-like species <img src="https://www.fisheries.noaa.gov/s3/styles/original/s3/2021-01/640x427-Atlantic_Menhaden_NB_W.jpg?itok=QBXXGzDD" alt="Image of Atlantic menhaden fish" width = "100"> -- - OM scenarios: - Scenario 1 (S1): base scenario without environmental forcing - Scenario 2 (S2): environmental forcing scenario -- - EM scenarios: - FIMS without young-of-the-year (YOY) survey - FIMS with young-of-the-year (YOY) survey .footnote[ .hyperlink-style[[Chagaris, D., Drew, K., Schueller, A., Cieri, M., Brito, J., and Buchheister, A. 2020. Ecological reference points for Atlantic menhaden established using <br> an ecosystem model of intermediate complexity. Frontiers in Marine Science, 7:606417. 10.3389/fmars.2020.606417.](https://doi.org/10.3389/fmars.2020.606417)]<br> ] --- # Lessons Learned #1: Sample Size vs. Survey Types - Increasing age composition sample size did not fix non-convergence in the EM - Simulating a dedicated young-of-the-year (YOY) survey index improved model fits and recruitment tracking .pull-left[ <img src="static/ecosystemom_atlantic_menhaden_recruitment_without_yoy.png" width="80%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="static/ecosystemom_atlantic_menhaden_recruitment_with_yoy.png" width="80%" style="display: block; margin: auto;" /> ] -- 💡 **{ecosystemom} provides a testbed to evaluate alternative survey designs** --- # Lessons Learned #2: Perfectly Known Natural Mortality - Passing the "true" time-varying and age-varying natural mortality (M) matrix from the OM (S1) yielded matching estimates - Assuming perfectly known time-varying M is not applicable to real-world assessments .pull-left[ <img src="static/ecosystemom_atlantic_menhaden_biomass_comparison.png" width="80%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="static/ecosystemom_atlantic_menhaden_fishing_mortality_comparison.png" width="80%" style="display: block; margin: auto;" /> ] -- 💡 **{ecosystemom} provides a testbed to explore parameter and process misspecifications** --- # Lessons Learned #3: Incorporating Environmental Drivers - 🚧 Implementing dynamic structural equation model (DSEM) in FIMS is currently a work in progress 🚧 - Active environmental forcing (S2) in the OM creates challenges with parameter estimation when the EM cannot fit to the environmental driver ```md ⚠️ FIMS Warning ⚠️ #> Warning: ! Large condition number detected in Hessian; the matrix may be near singular. #> ℹ Condition number of Hessian ("1.406917e+05") exceeds threshold of 1e+05. #> ℹ This suggests the model is weakly identified and results may be unreliable. #> ℹ Consider simplifying the model, improving data quality, or fixing poorly #> informed parameters. #> ℹ The 2 largest standard error values are for parameters: #> ℹ 1. "expected_recruitment": "8.273532e+09" #> ℹ 2. "numbers_at_age": "8.273532e+09" ``` -- 💡 **{ecosystemom} provides a testbed to evaluate how to best incorporate climate and ecosystem information into stock assessment models** --- # Summary 🎉 **FIMS successfully recovers "true" focal stock dynamics from Ecosim OMs** 🎉 ✅️ Extract "true" underlying biomass, age structures, fishing mortality, and time-varying natural mortality using `get_truth()` for comparisons ✅️ Simulate realistic fleets and generate required data for FIMS using `sample_*()` ✅️ Automatically map Ecosim outputs into starting parameters for seamless setup --- # Future Directions <img src="static/ecosystemom_future_directions.jpg" width="65%" style="display: block; margin: auto;" /> 🤝 To contribute or share feedback on {ecosystemom}, visit the repository or email Bai Li at bai.li@noaa.gov. .footnote[ [1] Figure generated by Gemini 3.6, Google, September 2026 <br> [2] Weekly Google meet link: .hyperlink-style[[ https://meet.google.com/umk-toiv-ifs](https://meet.google.com/umk-toiv-ifs)] ] ??? - Expanding {ecosystemom} to ingest spatially explicit operating models like Ecospace and Atlantis - Simulating spatial survey sampling and index generation under shifting species distributions - Coupling single-species assessments into closed-loop Management Strategy Evaluations to test climate-ready harvest control rules - Continuing to build on FAIR open-science principles through transparent, community-driven development, and weekly public working sessions <script> (function() { var bar = document.createElement('div'); bar.className = 'progress-bar'; document.querySelector('.remark-slides-area').appendChild(bar); slideshow.on('afterShowSlide', function(slide) { var count = slideshow.getSlideCount(); var index = slide.getSlideIndex(); bar.style.width = (index / (count - 1) * 100) + '%'; }); })(); </script> <style type="text/css"> .pull-left-75 { float: left; width: 75%; } .pull-right-25 { float: right; width: 25%; } .clear { clear: both; } </style>