This function calculates Demetrius' entropy from vectors of age-specific survivorship (lx) and fecundity (mx). Users can choose between the scaled (Caswell, 2001 eqns. 4.94-4.97) or unscaled (from Demetrius 1978) method.

entropy_d(lx, mx, type = "scaled", ...)

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.

mx

Either an age-specific fecundity trajectory (a vector of non-negative values), or submatrix F from a matrix population model.

type

Calculation type, either `scaled` (default) or `unscaled`.

...

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

Value

Demetrius' entropy.

Details

The scaled version accounts for population growth or shrinkage by adjusting the contributions of survivorship and fecundity using the dominant eigenvalue (lambda). Specifically, each contribution is weighted by lambda raised to the negative power of age. Conversely, the unscaled version does not account for population growth. It calculates entropy directly from the proportional contributions of survivorship and fecundity without adjustment for population dynamics.

Warning

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

References

Demetrius, L. 1978. Adaptive value, entropy and survivorship curves. Nature, 275(5677), 213–214.

Caswell, H. 2001. Matrix Population Models: Construction, Analysis, and Interpretation. Sinauer Associates.

Author

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

Patrick Barks <patrick.barks@gmail.com>

Richard Hinrichsen <rich@hinrichsenenvironmental.com>

Owen Jones <jones@biology.sdu.dk>

Examples

data(mpm1)

# derive trajectories of lx and mx, starting from stage 2
lx <- mpm_to_lx(mpm1$matU, start = 2)
mx <- mpm_to_mx(mpm1$matU, mpm1$matF, start = 2)

entropy_d(lx, mx, type = "unscaled")
#> [1] 2.062862
entropy_d(lx, mx, type = "scaled")
#> [1] 0.7735551


# calculate entropy directly from MPM
entropy_d(lx = mpm1$matU, mx = mpm1$matF, start = 2)
#> [1] 0.7735551