Estimating Length-Based Indicators for Fish Stock Assessment

Provides tools for estimating length-based indicators (LBIs) from length-frequency data to assess fish stock status and evaluate growth and recruitment overfishing in data-limited fisheries. Implements the sustainability indicators of Froese (2004) , empirical biological reference points from Froese and Binohlan (2000) , and the decision framework of Cope and Punt (2009) . Incorporates a three-tier Monte Carlo and bootstrap uncertainty propagation framework for sustainability indicators, optimum bin size calculations following Wang et al. (2020) , multi-month length-frequency harmonization, and length-weight relationship fitting. Methodology is detailed in Ali et al. (2025) .


aLBI: Length-Based Indicators and Fish Stock Assessment in R

CRAN status License: GPL v3 DOI

aLBI (Assessment of Length-Based Indicators) is an R package developed for data-limited fish stock assessment using catch length-frequency distributions. The package operationalises the sustainability indicators of Froese (2004) and the decision-tree framework of Cope & Punt (2009) to evaluate stock status against target ($0.40 \cdot SB_0$) and limit ($0.25 \cdot SB_0$) spawning biomass reference points.

To overcome the sensitivity of length-based indicators to class boundary step-functions, aLBI implements a three-tier Monte Carlo and bootstrap uncertainty propagation framework.


Key Features

  • Three-Tier Uncertainty Propagation (FishPar): Quantifies parameter uncertainty (Tier 1: Monte Carlo on allometric regressions), catch sampling variability (Tier 2: bootstrap resampling), and joint total uncertainty (Tier 3).
  • Automated Bin Size Optimization (FrequencyTable): Automatically selects biological length class intervals using the Optimum Bin Size (OBS) formula of Wang et al. (2020).
  • Multi-Month Harmonization (FreqTM): Aggregates multi-temporal catch data into consistent, date-indexed length classes across months.
  • Stock Status Decision Engine (FishSS): Determines probabilities of falling below target and limit spawning biomass reference points using Cope & Punt (2009) look-up tables with robust objective trigger logic.
  • Allometric Growth Modeling (LWR): Fits power-law length–weight relationships ($W = a \cdot L^b$) via log-log linear models with publication-ready diagnostic plots.
  • CRAN Policy Compliant: File writing defaults to save_output = FALSE across functions to avoid unauthorized disk writes during standard evaluation.

Function Overview

Function Primary Purpose Key Inputs Key Outputs
FrequencyTable() Constructs length-frequency tables Raw individual fish lengths Binned frequency distribution table ($lfqTable, $lfreq)
FreqTM() Builds multi-month length-frequency tables Monthly length observations Harmonized monthly frequency matrices
FishPar() Calculates reference lengths & Froese indicators Length-frequency table ($lfreq) Three-tier CIs, derived scalars (Pobj, LM_ratio), and diagnostic plots
FishSS() Evaluates stock status & selectivity pattern FishPar outputs + cpdata Biomass probabilities (p_below_target, p_below_limit), selectivity
LWR() Fits length–weight allometric regressions Length and weight vectors Regression coefficients ($a, b, R^2$), confidence intervals, ggplot2 object

Installation

Install the released stable version from CRAN:

install.packages("aLBI")

Install the development version from GitHub:

# install.packages("devtools")
devtools::install_github("Ataher76/aLBI")

Sequential Workflow Example

Step 1: Generate Length-Frequency Distribution

library(aLBI)
library(readxl)

# Load bundled raw length data
raw_path <- system.file("exdata", "ExData.xlsx", package = "aLBI")
raw_data <- readxl::read_excel(raw_path)

# Build frequency table using automatic bin sizing (Wang et al., 2020)
freq_res <- FrequencyTable(
  data        = raw_data,
  bin_width   = NULL,
  save_output = FALSE
)

# Extract frequency distribution for FishPar
lf_table <- freq_res$lfreq
head(lf_table)

Step 2: Estimate Reference Lengths & Froese Indicators

# Execute FishPar with Monte Carlo and bootstrap simulations
par_res <- FishPar(
  data        = lf_table,
  resample    = 1000,       # Use >= 5000 for publication
  save_output = FALSE
)

# Biological reference points (Linf, Lmat, Lopt)
par_res$estimated_length_par

# Froese indicators with Tier 3 joint total uncertainty
par_res$froese_par_joint

Step 3: Assess Spawning Biomass Status

# Load Cope & Punt (2009) lookup table
cp_path <- system.file("exdata", "cpdata.xlsx", package = "aLBI")
cp_data <- readxl::read_excel(cp_path)

# Evaluate stock status probabilities
stock_eval <- FishSS(
  data     = cp_data,
  LM_ratio = par_res$LM_ratio,
  Pmat     = par_res$froese_par_joint$Mean[1],
  Popt     = par_res$froese_par_joint$Mean[2],
  Pmega    = par_res$froese_par_joint$Mean[3]
)

# View stock status probabilities and selectivity pattern
stock_eval$StockStatus
stock_eval$Selectivity

Step 4: Length–Weight Relationship Analysis

# Load bundled length-weight data
lw_path <- system.file("exdata", "LWdata.xlsx", package = "aLBI")
lw_data <- readxl::read_excel(lw_path)

# Model LWR with log-log linear regression
lwr_res <- LWR(
  data          = lw_data,
  log_transform = TRUE,
  save_output   = FALSE
)

# Model summary parameters
lwr_res$model_summary

Three-Tier Uncertainty Architecture

FishPar handles the non-differentiable step-function transitions across length class bins by reporting three separate uncertainty tiers:

  • Tier 1 (Parameter Uncertainty Only): Draws $L_{mat}$ and $L_{opt}$ across iterations using Monte Carlo allometric error while holding observed catch fixed.
  • Tier 2 (Data Uncertainty Only): Resamples the catch distribution via non-parametric bootstrapping while holding length parameters fixed at their sample means.
  • Tier 3 (Joint Total Uncertainty): Integrates simultaneous parameter drawing and catch bootstrapping across all iterations, providing defensible, honest confidence intervals for reporting.

Citation

To cite aLBI in publications, please refer to the primary methodology paper:

Ali, A., Sarker, M. R., & Alam, M. S. (2025). Development of a simple R package (aLBI) for the estimation of stock status from the length frequency data. Fisheries Research, 288, 107467. https://doi.org/10.1016/j.fishres.2025.107467

@article{ali2025albi,
  title   = {Development of a simple R package (aLBI) for the estimation of stock status from the length frequency data},
  author  = {Ali, Ataher and Sarker, Mohammad Ruhul and Alam, Mohammed Shahidul},
  journal = {Fisheries Research},
  volume  = {288},
  pages   = {107467},
  year    = {2025},
  doi     = {10.1016/j.fishres.2025.107467}
}

Authors & Maintainer


License

This package is licensed under the GNU General Public License v3.0 (GPL-3).

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("aLBI")

0.2.0 by Ataher Ali, 15 days ago


https://github.com/Ataher76/aLBI


Report a bug at https://github.com/Ataher76/aLBI/issues


Browse source code at https://github.com/cran/aLBI


Authors: Ataher Ali [aut, cre] , Mohammed Shahidul Alam [aut] (ORCID:


Documentation:   PDF Manual  


GPL-3 license


Imports ggplot2, graphics, grDevices, openxlsx, stats, utils

Suggests dplyr, knitr, readxl, rmarkdown, testthat


See at CRAN