R/perturb_vr.R
perturb_vr.Rd
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",
...
)
The survival component of a matrix population model (i.e., a square projection matrix reflecting survival-related transitions; e.g., progression, stasis, and retrogression).
The sexual component of a matrix population model (i.e., a square projection matrix reflecting transitions due to sexual reproduction).
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).
Magnitude of the perturbation. Defaults to 1e-6
.
Whether to return sensitivity
or elasticity
values.
Defaults to sensitivity
.
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
.
A list with 5 elements:
sensitivity or elasticity of demog_stat
to survival
sensitivity or elasticity of demog_stat
to growth
sensitivity or elasticity of demog_stat
to shrinkage
sensitivity or elasticity of demog_stat
to sexual
fecundity
sensitivity or elasticity of demog_stat
to clonality
Other perturbation analysis:
perturb_matrix()
,
perturb_stochastic()
,
perturb_trans()
,
pop_vectors()
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
#>