
Compute Von Bertalanffy-Equivalent Growth Coefficient
Source:R/helper_functions.R
compute_k_vb_equivalent.RdDerives the von Bertalanffy growth coefficient \(k\) from biological milestones \((L_\infty, L_0, L_{mat}, t_{mat})\). This enables Chen-Watanabe mortality estimation using posteriors from any growth model (von Bertalanffy, Gompertz, or Logistic).
Value
Numeric vector of VB-equivalent \(k\) values. Invalid values
(from non-positive arguments to log) are returned as NA.
Details
The key insight is that while the three growth models use different functional forms and produce different numerical \(k\) values, they all estimate the same underlying biological quantities: asymptotic length, birth size, and maturity milestones. The VB-equivalent \(k\) is computed as:
$$k_{VB}^{equiv} = \frac{1}{t_{mat}} \ln\left(\frac{L_\infty - L_0}{L_\infty - L_{mat}}\right)$$
This is the growth coefficient that would produce a von Bertalanffy curve passing through the biological milestones \((0, L_0)\) and \((t_{mat}, L_{mat})\) with asymptote \(L_\infty\).
When the input growth fit is von Bertalanffy with maturity-based parameterization, this computation exactly reproduces the fitted \(k\). When the input is Gompertz or Logistic, it produces the VB-equivalent \(k\) that encodes the same biological growth information.
The von Bertalanffy model tends to produce unstable \(L_\infty\) estimates when data are sparse at older ages - a common situation in elasmobranch research. Gompertz and Logistic models often provide more reliable fits in these cases. By deriving VB-equivalent \(k\) from biological milestones, users can select the growth model that best fits their data while still using Chen-Watanabe mortality estimation and maintaining theoretical coherence (since CW was derived under VB assumptions).
See also
M_chen_watanabe_L0 for the L0-parameterized CW model,
extract_growth_parameters for posterior extraction.
Examples
if (FALSE) { # \dontrun{
# Extract from any growth model posterior
draws <- extract_growth_parameters(growth_fit, sex = 1)
k_vb <- compute_k_vb_equivalent(
Linf = draws$Linf,
L0 = draws$L0,
Lmat = draws$Lmat,
tmat = draws$tmat
)
# Direct specification for sensitivity analysis
k_vb <- compute_k_vb_equivalent(
Linf = rnorm(1000, 100, 5),
L0 = rnorm(1000, 25, 2),
Lmat = rnorm(1000, 70, 3),
tmat = rnorm(1000, 10, 1)
)
} # }