eigen.analysis {popbio} | R Documentation |
Calculate population growth rate and other demographic parameters from a projection matrix model using matrix algebra
eigen.analysis(A, zero=TRUE)
A |
A projection matrix |
zero |
Set sensitivities for unobserved transitions to zero |
The calculation of eigenvalues and eigenvectors partly follows Matlab code in section 4.8.1 (p. 107) in Caswell (2001).
The built-in eigen
function returns eigenvalues in descreasing
order of magnitude or modulus. The dominant eigenvalue of imprimitive
matrices with d eigenvalues of equal modulus is the one with the
largest real part (which.max(Re(eigen(A)$values))
). The damping
ratio is calculated by dividing the dominant eigenvalue by the second
largest modulus (Mod
).
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 |
If matrix A is singular, then eigen.analysis
will return
elasticities, sensitivities, and reproductive values with
NAs.
This function is also included in demogR
package.
Original code by James Holland Jones, Stanford University, Department of Anthropological Sciences, 12 August 2005 at http://popstudies.stanford.edu/summer_course/.
Caswell, H. 2001. Matrix population models: construction, analysis, and interpretation, Second edition. Sinauer, Sunderland, Massachusetts, USA.
eigen
and pop.projection
## 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 data(teasel) teaselA<-teasel$T + teasel$F a<-eigen.analysis(teaselA) 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(teaselA, cex=.8, mar=c(0.5,3,4,1) ) title("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(teaselA, zero=FALSE)$sensitivities, cex=.8, mar=c(0.5,3,4,1) ) title("Sensitivity matrix 2", line=3) par(op)