vitalsens {popbio} | R Documentation |
Calculates deterministic sensitivities and elasticities of lambda to lower-level vital rates using partial derivatives
vitalsens(elements, vitalrates)
elements |
An object of mode expression with all
matrix elements represented by zeros or symbolic vital rates. |
vitalrates |
A list of vital rates with names
matching expressions in elements above. |
Vital rate sensitivities and elasticities are discussed in example 9.3 and 9.6 in Caswell (2001). Also see Chapter 9 and Box 9.1 for Matlab code in Morris and Doak (2002).
A dataframe with vital rate estimates, sensitivities, and elasticities.
The element expressions should return the actual matrix element estimates
after evaluating the variables using eval
below.
A<-sapply(elements, eval, vitalrates, NULL)
In addition, these expressions should be arranged by rows so the following returns the projection matrix.
matrix(A, nrow=sqrt(length(elements)), byrow=TRUE)
Chris Stubben. Based on code posted by Simon Blomberg to R-help mailing list.
Caswell, H. 2001. Matrix population models. Construction, Analysis and interpretation. 2nd ed. Sinauer, Sunderland, Massachusetts.
Morris, W. F., and D. F. Doak. 2002. Quantitative conservation biology: Theory and practice of population viability analysis. Sinauer, Sunderland, Massachusetts.
## emperor goose in Morris and Doak 2002. goose.vr<-list( Ss0=0.1357, Ss1=0.8926, Sf2=0.6388, Sf3= 0.8943) goose.el<-expression( 0, 0, Sf2*Ss1,Sf3*Ss1, Ss0,0, 0, 0, 0, Ss1,0, 0, 0, 0, Ss1, Ss1) ## first plot effects of changing vital rates -- Figure 9.1 n<-length(goose.vr) vr<-seq(0,1,.1) vrsen<-matrix(numeric(n*length(vr)), ncol=n, dimnames=list(vr, names(goose.vr))) for (h in 1:n) { goose.vr2<-list( Ss0=0.1357, Ss1=0.8926, Sf2=0.6388, Sf3= 0.8943) for (i in 1:length(vr)) { goose.vr2[[h]]<-vr[i] A<-matrix(sapply(goose.el, eval,goose.vr2 , NULL), nrow=sqrt(length(goose.el)), byrow=TRUE) vrsen[i,h] <- max(Re(eigen(A)$values)) } } matplot(rownames(vrsen), vrsen, type='l', lwd=2, las=1, ylab="Goose population growth", xlab="Value of vital rate", main="Effects of changing goose vital rates") vrn<-expression(s[0], s["">=1], f[2], f["">=3]) legend(.8, .4, vrn, lty=1:4, lwd=2, col=1:4, cex=1.2) ## then calculate sensitivities -- Table 9.1 x<-vitalsens(goose.el, goose.vr) x sum(x$elasticity) barplot(t(x[,2:3]), beside=TRUE, legend=TRUE, las=1, xlab="Vital rate", main="Goose vital rate sensitivity and elasticity") abline(h=0) ## Table 7 endangered lesser kestral in Hiraldo et al 1996 kest.vr<- list(b = 0.9321, co = 0.3847, ca = 0.925, so = 0.3409, sa = 0.7107) kest.el <- expression( co*b*so, ca*b*so, sa, sa) x<-vitalsens(kest.el, kest.vr) x sum(x$elasticity) barplot(t(x[,2:3]), beside=TRUE, las=1, xlab="Vital rate", main="Kestral vital rate sensitivity and elasticity") legend(1,1, rownames(t(x[,2:3])), fill=grey.colors(2)) abline(h=0)