[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