eigen.analysis {popbio} | R Documentation |
Eigenvalue and eigenvector analysis of a projection matrix
Description
Calculate population growth rate and other demographic parameters from a projection matrix model using matrix algebra
Usage
eigen.analysis(A, zero = FALSE)
Arguments
A |
A projection matrix |
zero |
Set sensitivities for unobserved transitions to zero, default is FALSE |
Details
The calculation of eigenvalues and eigenvectors partly follows Matlab code in
section 4.8.1 (p. 107) in Caswell (2001). Since popbio
version 2.0,
each part returned by eigen.analysis
is now inlcuded as a separate
function.
Value
A list with 6 items
lambda1 |
dominant eigenvalue with largest real part |
stable.stage |
proportional stable stage distribution |
sensitivities |
matrix of eigenvalue sensitivities |
elasticities |
matrix of eigenvalue elasticities |
repro.value |
reproductive value scaled so v[1]=1 |
damping.ratio |
damping ratio |
Note
If matrix A is singular, then eigen.analysis
will return
elasticities, sensitivities, and reproductive values with NAs.
Author(s)
Original code by James Holland Jones, Stanford University, August 2005
References
Caswell, H. 2001. Matrix population models: construction, analysis and interpretation, Second edition. Sinauer, Sunderland, Massachusetts, USA.
See Also
eigen
and pop.projection
Examples
## Imprimitive matrix
A <- matrix(c(0,0,2,.3,0,0,0,.6,0), nrow=3,byrow=TRUE)
A
ev <- eigen(A)
ev$values
Mod(ev$values)
lmax <- which.max(Re(ev$values))
lmax
Re(ev$values)[lmax]
## damping ratio is NA
eigen.analysis(A)
## cycles every 3 years
stage.vector.plot(pop.projection(A, c(1,1,1), 10)$stage.vectors)
### Teasel
a <- eigen.analysis(teasel)
a
barplot(a$stable.stage, col="green", ylim=c(0,1),
ylab="Stable stage proportion", xlab="Stage class", main="Teasel")
box()
op <- par(mfrow=c(2,2))
image2(teasel, cex=.8, mar=c(0.5,3,4,1) )
title("Teasel projection matrix", line=3)
image2(a$elasticities, cex=.8, mar=c(0.5,3,4,1) )
title("Elasticity matrix", line=3)
## default is sensitivity for non-zero elements in matrix
image2(a$sensitivities, cex=.8, mar=c(0.5,3,4,1) )
title("Sensitivity matrix 1", line=3)
## use zero=FALSE to get sensitivities of all elements
image2(eigen.analysis(teasel, zero=FALSE)$sensitivities, cex=.8, mar=c(0.5,3,4,1) )
title("Sensitivity matrix 2", line=3)
par(op)