setwd("~/Dropbox/Clases_UPJ/Biología de poblaciones/Alumnos_BioP/2018_10/Clases/Prácticas/Práctica 2")
# Sección I
# Punto 1a, cálculo de r
# Cargamos la base de datos
datos1<-read.table("invasive.csv", sep = ",", header=T)
attach(datos1)
# Transformamos los datos del numero de individuos a logaritmo natural y el tiempo en fechas lo convertimos a número de años transcurridos
datos1.tra<-transform(datos1,n=log(n), tiempo=tiempo-1962)
detach(datos1)
attach(datos1.tra)
# Ajustamos un modelo lineal al número de individuos en función del tiempo
fit1<-lm(n~tiempo)
summary(fit1)
##
## Call:
## lm(formula = n ~ tiempo)
##
## Residuals:
## 1 2 3 4 5 6
## -0.69394 1.46597 -0.32546 -0.67268 0.29003 -0.06393
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.38709 0.75809 1.830 0.14127
## tiempo 0.18810 0.02986 6.299 0.00325 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9052 on 4 degrees of freedom
## Multiple R-squared: 0.9084, Adjusted R-squared: 0.8855
## F-statistic: 39.68 on 1 and 4 DF, p-value: 0.003246
# Punto 1b, cálculo para el tiempo doble usando el r estimado
log(2)/0.18810
## [1] 3.684993
# Punto 1c,despejamos el tiempo en la ecuación lineal y creamos una función para predecir cuanto demorará la población en alcanzar 10000 individuos
m.time1=function(r,N=10000){(log(N)-1.38709)/r}
#Creamos un vector con diferentes valores para r que nos permita predecir en cuanto tiempo la población alcanza 10000 individuos si crece 2, 3 o 4 veces mas rápido
rs=c(0.18810,0.18810*2,0.18810*3,0.18810*4)
rs
## [1] 0.1881 0.3762 0.5643 0.7524
m.time1(rs)
## [1] 41.59091 20.79546 13.86364 10.39773
detach(datos1.tra)
#Sección II
#Punto 5a, Matriz de Leslie
A=matrix(c(0,40,50,20,0.25,0,0,0,0,0.4,0,0,0,0,0.25,0), nr=4, byrow = T)
A
## [,1] [,2] [,3] [,4]
## [1,] 0.00 40.0 50.00 20
## [2,] 0.25 0.0 0.00 0
## [3,] 0.00 0.4 0.00 0
## [4,] 0.00 0.0 0.25 0
N0=matrix(c(400,100,250,75), ncol=1)
N0
## [,1]
## [1,] 400
## [2,] 100
## [3,] 250
## [4,] 75
# Punto 5b, proyección a 10 años
years=10
n.projections=matrix(0,nrow=nrow(A), ncol=years+1)
n.projections
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
## [1,] 0 0 0 0 0 0 0 0 0 0 0
## [2,] 0 0 0 0 0 0 0 0 0 0 0
## [3,] 0 0 0 0 0 0 0 0 0 0 0
## [4,] 0 0 0 0 0 0 0 0 0 0 0
n.projections[,1]=N0
n.projections
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
## [1,] 400 0 0 0 0 0 0 0 0 0 0
## [2,] 100 0 0 0 0 0 0 0 0 0 0
## [3,] 250 0 0 0 0 0 0 0 0 0 0
## [4,] 75 0 0 0 0 0 0 0 0 0 0
for (i in 1:years) n.projections[,i+1]=A%*%n.projections[,i]
n.projections
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 400 18000.0 7250 182200.0 162700 1867250.00 2541625.0 19577100.0
## [2,] 100 100.0 4500 1812.5 45550 40675.00 466812.5 635406.2
## [3,] 250 40.0 40 1800.0 725 18220.00 16270.0 186725.0
## [4,] 75 62.5 10 10.0 450 181.25 4555.0 4067.5
## [,9] [,10] [,11]
## [1,] 34833850.00 209412750.00 447494812.5
## [2,] 4894275.00 8708462.50 52353187.5
## [3,] 254162.50 1957710.00 3483385.0
## [4,] 46681.25 63540.62 489427.5
#Punto 5c, gráfica por estados
matplot(0:years, t(n.projections), type = "l", lty = 1:4,col = 1, ylab = "Abundancia", xlab = "Año")
legend("topleft", legend = c("Semilla", "Adulto pequeño", "Adulto mediano", "Adulto grande"),lty = 1:4, col = 1, bty = "n")

#Punto 6a, cálculo de elasticidades
#Usando ánalisis de valores y vectores "propios" (Eigenanalysis) de la matriz llegamos directamente a la convergencia de lambda sin tenerlo que hacer paso a paso.
eigs.A=eigen(A)
eigs.A
## $values
## [1] 3.3936354 -2.8857187 -0.3698824 -0.1380344
##
## $vectors
## [,1] [,2] [,3] [,4]
## [1,] 0.9972599647 -0.99619648 -0.6688791 -0.0904684
## [2,] 0.0734654616 0.08630402 0.4520891 0.1638512
## [3,] 0.0086592050 -0.01196292 -0.4889004 -0.4748129
## [4,] 0.0006379004 0.00103639 0.3304432 0.8599541
dom.pos=which.max(eigs.A[["values"]])
L1 <- Re(eigs.A[["values"]][dom.pos])
L1
## [1] 3.393635
#La distribución estable de estados se alcanza cuando la abundancia relativa de los estados es la misma
w <- Re(eigs.A[["vectors"]][, dom.pos])
ssd <- w/sum(w)
round(ssd, 3)
## [1] 0.923 0.068 0.008 0.001
# Lo anterior muestra que si la matriz de projección no cambia en el tiempo, estara compuesta de los porcentajes calculados para cada estado
#El valor reproductivo es el número de individuos a nacer de una determinada edad, lo calculamos con la matriz transpuesta de la matriz de proyecciones (A)
M <- eigen(t(A))
v <- Re(M$vectors[, which.max(Re(M$values))])
v
## [1] 0.04713749 0.63986977 0.71496312 0.27779935
RV <- v/v[1]
round(RV,3)
## [1] 1.000 13.575 15.168 5.893
#La importancia relativa de cada transición del ciclo de vida se hace calculando la "sensibilidad" y "elasticidad" de la matriz
#Las sensibilidades son la contribución directa de cada transición a lambda
vw.s <- v %*% t(w)
(S <- vw.s/as.numeric(v %*% w))
## [,1] [,2] [,3] [,4]
## [1,] 0.468281 0.0344970 0.004066082 0.0002995373
## [2,] 6.356700 0.4682810 0.055195202 0.0040660822
## [3,] 7.102704 0.5232371 0.061672758 0.0045432664
## [4,] 2.759760 0.2033041 0.023962988 0.0017652889
#Las elasticidades son sensibilidades ponderadas por las probabilidades de transición
elas <- (A/L1) * S
round(elas, 3)
## [,1] [,2] [,3] [,4]
## [1,] 0.000 0.407 0.060 0.002
## [2,] 0.468 0.000 0.000 0.000
## [3,] 0.000 0.062 0.000 0.000
## [4,] 0.000 0.000 0.002 0.000
#Dos propiedades importantes tienen estas elasticidades, transiciones imposibles tienen elasticidades iguales a cero y todas las elasticidades de la matriz suman uno
#Así es facil comparar elasticidades para diferentes matrices y diferentes organismos
#Lo anterior es importante en el manejo de especies invasoras o en peligro donde buscamos tener el maximo impacto con el mínimo esfuerzo