Calculate Keyfitz's entropy from a vector of age-specific survivorship (lx), or from the U submatrix of a matrix population model.

entropy_k(lx, trapeze = FALSE, ...)

Arguments

lx

Either a survivorship trajectory (a vector of monotonically-declining values in the interval [0,1]), or submatrix U from a matrix population model.

trapeze

A logical argument indicating whether the composite trapezoid approximation should be used for approximating the definite integral.

...

Additional variables passed to `mpm_to_lx` if data are supplied as a matrix. This could include the `start` argument to select a starting stage.

Value

Keyfitz's life table entropy.

Warning

Note that this function may produce unexpected results if used on partial survivorship trajectories. In addition, it is sensitive to the length of the survivorship vector. We direct users to the function `shape_surv` which is relatively robust to these issues.

Furthermore, de Vries et al. 2023 have shown that the way this function calculates entropy is problematic for other reasons. We recommend to use `entropy_k_age` or ``entropy_k_stage` as alternatives, See de Vries et al. 2023 for details.

References

Keyfitz, N. 1977. Applied Mathematical Demography. New York: Wiley.

Demetrius, L., & Gundlach, V. M. 2014. Directionality theory and the entropic principle of natural selection. Entropy 16: 5428-5522.

de Vries, C., Bernard, C., & Salguero-Gómez, R. 2023. Discretising Keyfitz' entropy for studies of actuarial senescence and comparative demography. Methods in Ecology and Evolution, 14, 1312–1319. <doi:10.1111/2041-210X.14083>

Author

Owen R. Jones <jones@biology.sdu.dk>

Roberto Salguero-Gomez <rob.salguero@zoo.ox.ac.uk>

Examples

data(mpm1)

# derive lx trajectory, starting from stage 2
lx <- mpm_to_lx(mpm1$matU, start = 2)

# calculate Keyfitz' entropy
entropy_k(lx)
#> Warning: The way `entropy_k` calculates entropy is problematic. Use `entropy_k_age` or `entropy_k_stage` as alternatives. See de Vries et al. 2023 for details. After deprecation, this function will be renamed `life_elas`.
#> [1] 0.9077186

# use trapezoid approximation for definite integral
entropy_k(lx, trapeze = TRUE)
#> Warning: The way `entropy_k` calculates entropy is problematic. Use `entropy_k_age` or `entropy_k_stage` as alternatives. See de Vries et al. 2023 for details. After deprecation, this function will be renamed `life_elas`.
#> [1] 1.128087

# calculate directly from the matrix
entropy_k(mpm1$matU)
#> Warning: The way `entropy_k` calculates entropy is problematic. Use `entropy_k_age` or `entropy_k_stage` as alternatives. See de Vries et al. 2023 for details. After deprecation, this function will be renamed `life_elas`.
#> [1] 0.4760507