[R] Elasticity in Leslie Matrix
Chris Stubben
stubben at lanl.gov
Mon Oct 29 17:24:48 CET 2007
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)
> x at gradient[i])), 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 at 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.
More information about the R-help
mailing list