Perturbs lower-level vital rates within a matrix population model and measures the response (sensitivity or elasticity) of the per-capita population growth rate at equilibrium (\(\lambda\)), or, with a user-supplied function, any other demographic statistic.

These decompositions assume that all transition rates are products of a stage-specific survival term (column sums of matU) and a lower level vital rate that is conditional on survival (growth, shrinkage, stasis, dormancy, or reproduction). Reproductive vital rates that are not conditional on survival (i.e., within a stage class from which there is no survival) are also allowed.

perturb_vr(
  matU,
  matF,
  matC = NULL,
  pert = 1e-06,
  type = "sensitivity",
  demog_stat = "lambda",
  ...
)

Arguments

matU

The survival component of a matrix population model (i.e., a square projection matrix reflecting survival-related transitions; e.g., progression, stasis, and retrogression).

matF

The sexual component of a matrix population model (i.e., a square projection matrix reflecting transitions due to sexual reproduction).

matC

The clonal component of a matrix population model (i.e., a square projection matrix reflecting transitions due to clonal reproduction). Defaults to NULL, indicating no clonal reproduction (i.e., matC is a matrix of zeros).

pert

Magnitude of the perturbation. Defaults to 1e-6.

type

Whether to return sensitivity or elasticity values. Defaults to sensitivity.

demog_stat

The demographic statistic to be used, as in "the sensitivity/elasticity of demog_stat to vital rate perturbations." Defaults to the per-capita population growth rate at equilibrium (\(\lambda\)). Also accepts a user-supplied function that performs a calculation on a projection matrix and returns a single numeric value.

...

Additional arguments passed to the function demog_stat.

Value

A list with 5 elements:

survival

sensitivity or elasticity of demog_stat to survival

growth

sensitivity or elasticity of demog_stat to growth

shrinkage

sensitivity or elasticity of demog_stat to shrinkage

fecundity

sensitivity or elasticity of demog_stat to sexual fecundity

clonality

sensitivity or elasticity of demog_stat to clonality

See also

Other perturbation analysis: perturb_matrix(), perturb_stochastic(), perturb_trans(), pop_vectors()

Author

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

Patrick Barks <patrick.barks@gmail.com>

Examples

matU <- rbind(
  c(0.1, 0, 0, 0),
  c(0.5, 0.2, 0.1, 0),
  c(0, 0.3, 0.3, 0.1),
  c(0, 0, 0.5, 0.6)
)

matF <- rbind(
  c(0, 0, 1.1, 1.6),
  c(0, 0, 0.8, 0.4),
  c(0, 0, 0, 0),
  c(0, 0, 0, 0)
)

perturb_vr(matU, matF)
#> $survival
#> [1] 1.74464
#> 
#> $growth
#> [1] 0.3319942
#> 
#> $shrinkage
#> [1] -0.1760375
#> 
#> $fecundity
#> [1] 0.242957
#> 
#> $clonality
#> [1] 0
#> 

# use elasticities rather than sensitivities
perturb_vr(matU, matF, type = "elasticity")
#> $survival
#> [1] 0.9999999
#> 
#> $growth
#> [1] 0.1905332
#> 
#> $shrinkage
#> [1] -0.1796184
#> 
#> $fecundity
#> [1] 0.229048
#> 
#> $clonality
#> [1] 0
#> 

# use a larger perturbation than the default
perturb_vr(matU, matF, pert = 0.01)
#> $survival
#> [1] 1.741488
#> 
#> $growth
#> [1] 0.323864
#> 
#> $shrinkage
#> [1] -0.1793286
#> 
#> $fecundity
#> [1] 0.2428359
#> 
#> $clonality
#> [1] 0
#> 

# calculate the sensitivity/elasticity of the damping ratio to vital rate
#  perturbations
damping <- function(matA) { # define function for damping ratio
  eig <- eigen(matA)$values
  dm <- rle(Mod(eig))$values
  return(dm[1] / dm[2])
}

perturb_vr(matU, matF, demog_stat = "damping")
#> $survival
#> [1] -0.3015607
#> 
#> $growth
#> [1] -1.830972
#> 
#> $shrinkage
#> [1] 0.3132885
#> 
#> $fecundity
#> [1] 1.473109
#> 
#> $clonality
#> [1] 0
#>