Sorry, I didn't think carefully about your question on my first reply, so please ignore it.
Chapter 9 in Morris and Doak (2002) cover vital rate elasticities and sensitivities (see Box 9.1 for Matlab code http://www.sinauer.com/PVA/vitalsens.m). Simon, thanks for posting your code, I will add a function called vitalsens to the next release of the popbio package and output both sensitivities and elasiticities. Here's the example for the emperor goose vital rates in chapter 9. vl<-list( Ss0=0.1357, Ss1=0.8926, Sf2=0.6388, Sf3= 0.8943) el<-expression( 0, 0, Sf2*Ss1,Sf3*Ss1, Ss0,0, 0, 0, 0, Ss1,0, 0, 0, 0, Ss1, Ss1) ## and the matching elasticities in table 9.1 elas.var(el, vl) $Ss0 [1] 0.0797 $Ss1 [1] 0.92 $Sf2 [1] 0.00569 $Sf3 [1] 0.074 Also, the expression el should be formatted so this command returns the projection matrix. matrix(sapply(el, eval, vl), nrow=4, byrow=TRUE) Thanks, Chris Simon Blomberg-4 wrote: > > After a short exchange with the original questioner, I wrote the following > function to calculate the elasticities of lower level variables in > population transition matrices (Leslie matrices etc.) Perhaps it will be > of use to others. There is no error-checking, so use with care. Users > should consult Caswell (2001) for reference. > > Cheers, > > Simon. > > # example values to construct leslie matrix > > vl <- list(f1=1, f2=4, s0=.6, s=.4, v=.9, sigma=.5) > > # Expressions for each matrix element > F1 <- expression(sigma*s0*f1) > F2 <- expression(sigma*s0*f2) > S <- expression(s) > V <- expression(v) > el <- c(F1, F2, S, V) > > elas.var <- function (elements, varlist) { > # elements should be a vector of expressions corresponding to the > elements > # of the leslie matrix, in terms of the variables in varlist > > require(demogR) > res <- vector("list", length(varlist)) > deriv.funcs <- sapply(elements, deriv, namevec=names(varlist), > function.arg=TRUE) > devs <- lapply(deriv.funcs, function (x) do.call(x, varlist)) > leslie.mat <- matrix(as.numeric(devs), nrow=sqrt(length(elements)), > byrow=TRUE) > eig <- eigen.analysis(leslie.mat) > > for (i in 1:length(varlist)) { > derivs <- matrix( as.numeric(lapply(devs, function (x) > [EMAIL PROTECTED])), nrow=sqrt(length(elements)), byrow=TRUE) > res[[i]] <- varlist[[i]]/eig$lambda1*sum(derivs*eig$sensitivities) > names(res)[i] <- names(varlist)[i] > } > res > } > > # example output > >> elas.var(el, vl) > $f1 > [1] 0.06671376 > > $f2 > [1] 0.2346064 > > $s0 > [1] 0.3013201 > > $s > [1] 0.2346064 > > $v > [1] 0.4640735 > > $sigma > [1] 0.3013201 > > > Simon Blomberg, BSc (Hons), PhD, MAppStat. > Lecturer and Consultant Statistician > Faculty of Biological and Chemical Sciences > The University of Queensland > St. Lucia Queensland 4072 > Australia > T: +61 7 3365 2506 > email: S.Blomberg1_at_uq.edu.au > > Policies: > 1. I will NOT analyse your data for you. > 2. Your deadline is your problem. > > The combination of some data and an aching desire for > an answer does not ensure that a reasonable answer can > be extracted from a given body of data. - John Tukey. > > > > > > > > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > > -- View this message in context: http://www.nabble.com/Elasticity-in-Leslie-Matrix-tf4670533.html#a13470907 Sent from the R help mailing list archive at Nabble.com. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.