setwd("~/Dropbox/Clases_UPJ/Biología de poblaciones/A_Ecopo/Ciclo 1910/Examen_2")
## Punto 1
# Tasa intrínseca de crecimiento
datos1<-read.table("inva.csv", sep = ",", header=T)
datos1
## año n
## 1 1962 2
## 2 1975 200
## 3 1986 264
## 4 1989 328
## 5 1994 2200
## 6 1999 3955
attach(datos1)
plot (año, n)

datos1.tra<-transform(datos1, n=log(n), año=año-1962)
detach(datos1)
attach(datos1.tra)
plot (año, n)
fit1<-lm(n~año)
abline(fit1)

summary(fit1)
##
## Call:
## lm(formula = n ~ año)
##
## 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
## año 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
# Tiempo doble
(t2<-log(2)/0.18810)
## [1] 3.684993
# Tiempo necesario para alcanzar 10000 individuos
m.time1<-function(r, N=10000) {(log(N)-1.38709)/r}
rs<-c(0.1881*2,0.1881*3,0.1881*4)
m.time1(rs)
## [1] 20.79546 13.86364 10.39773
### Sección II
## A: Matriz de Lefkovitch
A=matrix(c(0,40,70,60,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 70.00 60
## [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
## B: 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 26000.0 10550 263400.0 288100 2746850.00 4740625.0 29880300.0
## [2,] 100 100.0 6500 2637.5 65850 72025.00 686712.5 1185156.2
## [3,] 250 40.0 40 2600.0 1055 26340.00 28810.0 274685.0
## [4,] 75 62.5 10 10.0 650 263.75 6585.0 7202.5
## [,9] [,10] [,11]
## [1,] 67066350.00 336107650.0 886936537.5
## [2,] 7470075.00 16766587.5 84026912.5
## [3,] 474062.50 2988030.0 6706635.0
## [4,] 68671.25 118515.6 747007.5
## C: 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")

## D: lambda que converge en el tiempo, usando ánalysis de valores y vectores "propios" (Eigenanalysis) de la matriz llegamos directamente a la convergencia de lambda
eigs.A=eigen(A)
eigs.A
## eigen() decomposition
## $values
## [1] 3.4832784+0.0000000i -2.7690598+0.0000000i -0.3571093+0.1672943i
## [4] -0.3571093-0.1672943i
##
## $vectors
## [,1] [,2] [,3]
## [1,] 0.9974004611+0i -0.995864517+0i 0.7103908+0.0000000i
## [2,] 0.0715848938+0i 0.089909987+0i -0.4078193-0.1910503i
## [3,] 0.0082204045+0i -0.012987800+0i 0.2923829+0.3509685i
## [4,] 0.0005899905+0i 0.001172582+0i -0.0734620-0.2801157i
## [,4]
## [1,] 0.7103908+0.0000000i
## [2,] -0.4078193+0.1910503i
## [3,] 0.2923829-0.3509685i
## [4,] -0.0734620+0.2801157i
dom.pos=which.max(eigs.A[["values"]])
## Warning in which.max(eigs.A[["values"]]): imaginary parts discarded in
## coercion
L1 <- Re(eigs.A[["values"]][dom.pos])
L1
## [1] 3.483278
# Años necesarios para la convergencia: tasa de crecimiento anual (El lambda general de la población es el valor que converge en el tiempo), lambda=Nt+1/Nt para cada año.
# Primero necesitamos la suma de todos los estados aplicando la función sum a cada columna.
n.totals=(apply(n.projections,2,sum))
n.totals
## [1] 825.0 26202.5 17100.0 268647.5 355655.0
## [6] 2845478.8 5462732.5 31347343.8 75079158.8 355980783.1
## [11] 978417092.5
# Ahora obtenemos cada Lambda dividiendo todos los Nt+1 por cada Nt.
lambdas=n.totals[-1]/n.totals[-(years+1)]
lambdas
## [1] 31.7606061 0.6526095 15.7103801 1.3238724 8.0006713 1.9197938
## [7] 5.7383999 2.3950724 4.7414061 2.7485110
#Los lambda que obtuvimos no convergen en el tiempo entonces necesitamos más unidades de tiempo
t=90
Nt=N0/sum(N0)
L.t=numeric(t)
#Creamos una iteración (for-loop) que reusa Nt para cada paso del tiempo, asegurandonos que tengamos un vector numerico vacio para sostener las salidas
for (i in 1:t) L.t[i] <- {
Nt1 <- A %*% Nt
L <- sum(Nt1)/sum(Nt)
Nt <- Nt1/sum(Nt1)
L
}
L.t # La convergencia se alcanza en el año 84
## [1] 31.7606061 0.6526095 15.7103801 1.3238724 8.0006713 1.9197938
## [7] 5.7383999 2.3950724 4.7414061 2.7485110 4.2235392 2.9979446
## [13] 3.9315583 3.1675477 3.7592892 3.2799713 3.6549170 3.3532406
## [19] 3.5906619 3.4004660 3.5507140 3.4306881 3.5257264 3.4499403
## [25] 3.5100369 3.4621687 3.5001621 3.4699214 3.4939376 3.4748307
## [31] 3.4900103 3.4779371 3.4875310 3.4799019 3.4859652 3.4811442
## [37] 3.4849761 3.4819295 3.4843512 3.4824259 3.4839563 3.4827396
## [43] 3.4837068 3.4829379 3.4835491 3.4830632 3.4834495 3.4831424
## [49] 3.4833865 3.4831925 3.4833467 3.4832241 3.4833216 3.4832441
## [55] 3.4833057 3.4832567 3.4832957 3.4832647 3.4832893 3.4832698
## [61] 3.4832853 3.4832729 3.4832828 3.4832750 3.4832812 3.4832762
## [67] 3.4832802 3.4832770 3.4832795 3.4832775 3.4832791 3.4832779
## [73] 3.4832789 3.4832781 3.4832787 3.4832782 3.4832786 3.4832783
## [79] 3.4832785 3.4832783 3.4832785 3.4832784 3.4832785 3.4832784
## [85] 3.4832784 3.4832784 3.4832784 3.4832784 3.4832784 3.4832784
# Número relativo de individuos en la convergencia, 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.925 0.066 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
## E: Las hipótesis deberian plantearse sobre el estado 2 (Adultos Pequeños) y el estado 3 (Adultos Medianos), ya que son los estados con mayor fertilidad.
# Para los Adultos Pequeños
A=matrix(c(0,40,70,60,0.25,0,0,0,0,0.4,0,0,0,0,0.25,0), nr=4, byrow = T)
nt <- matrix(c(400,100,250,75), ncol=1)
years=10
n.projections <- matrix(0, nrow = nrow(A), ncol = years + 1)
n.projections[, 1] <- nt
for (i in 1:years){
n.projections[, i + 1] <- A %*% n.projections[,i]
n.projections[2,] <- 0
}
n.projections
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
## [1,] 400 26000.0 6550 600 0 0 0 0 0 0 0
## [2,] 0 0.0 0 0 0 0 0 0 0 0 0
## [3,] 250 40.0 0 0 0 0 0 0 0 0 0
## [4,] 75 62.5 10 0 0 0 0 0 0 0 0
## Esta es la gráfica de la matrix si en todas las generaciones eliminamos los adultos pequenos de la poblacion
matplot(0:years, t(n.projections), type = "l", lty = 1:4,col = 1, ylab = "Stage Abundance", xlab = "Year", main = "grafica si en todas las generaciones eliminamos adulto peque?o de la poblacion")
legend("topright", legend = c("Semillas", "Adulto pequeño", "Adulto mediano", "Adulto grande"),lty = 1:4, col = 1, bty = "n")

# Para los Adultos Medianos
A=matrix(c(0,40,70,60,0.25,0,0,0,0,0.4,0,0,0,0,0.25,0), nr=4, byrow = T)
nt <- matrix(c(400,100,250,75), ncol=1)
years=10
n.projections <- matrix(0, nrow = nrow(A), ncol = years + 1)
n.projections[, 1] <- nt
for (i in 1:years){
n.projections[, i + 1] <- A %*% n.projections[,i]
n.projections[3,] <- 0
}
n.projections
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,] 400 26000.0 7750 260000.0 77500 2600000 775000 26000000 7750000
## [2,] 100 100.0 6500 1937.5 65000 19375 650000 193750 6500000
## [3,] 0 0.0 0 0.0 0 0 0 0 0
## [4,] 75 62.5 0 0.0 0 0 0 0 0
## [,10] [,11]
## [1,] 260000000 77500000
## [2,] 1937500 65000000
## [3,] 0 0
## [4,] 0 0
## Esta es la gráfica de la matrix si en todas las generaciones eliminamos los Adultos Medianos de la poblacion
matplot(0:years, t(n.projections), type = "l", lty = 1:4,col = 1, ylab = "Stage Abundance", xlab = "Year", main = "grafica si en todas las generaciones eliminamos adulto peque?o de la poblacion")
legend("topleft", legend = c("Semillas", "Adulto pequeño", "Adulto mediano", "Adulto grande"),lty = 1:4, col = 1, bty = "n")

## Puntos adicionales: Análisis de elasticidad
#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.03249728 -0.45278833 -0.69324130 -0.55977063
RV <- v/v[1]
round(RV,3)
## [1] 1.000 13.933 21.332 17.225
#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.4574552 0.03283223 0.003770268 0.0002705977
## [2,] 6.3737759 0.45745524 0.052531574 0.0037702681
## [3,] 9.7585656 0.70038656 0.080428433 0.0057724666
## [4,] 7.8797360 0.56554021 0.064943440 0.0046610860
#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.377 0.076 0.005
## [2,] 0.457 0.000 0.000 0.000
## [3,] 0.000 0.080 0.000 0.000
## [4,] 0.000 0.000 0.005 0.000
# Ya que buscamos tener el maximo impacto con el mínimo esfuerzo, la transicion más adecuada para manejar esta especie invasora es el paso de semillas a adultos pequeños,
# sin embargo, cualquier manejo de las semillas implica un esfuerzo mayor y agresivo con el ambiente.
#Por tanto, es recomendable enfocarse en la transición de semilla a adulto pequeño, pero solo erradicar los adultos pequeños, ya que son estadios conspicuos más fáciles de manejar que las semillas.