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=TRUE)

Arguments

A A projection matrix
zero Set sensitivities for unobserved transitions to zero

Details

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).

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.

This function is also included in demogR package.

Author(s)

Original code by James Holland Jones, Stanford University, Department of Anthropological Sciences, 12 August 2005 at http://popstudies.stanford.edu/summer_course/.

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
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)



[Package popbio version 1.1.11 Index]