Neste exercício vamos projetar o crescimento exponencial em tempo discreto de duas formas diferentes: sem estocasticidade demográfica(determinístico) e com estocasticidade demográfica.
Ao contrário dos exercícios anteriores, onde aplicamos diretamente as fórmulas do Gotelli (2007), neste vamos usar as taxas de natalidade(b) e de mortalidade (d) para projetar as populações. Ou seja, iremos usar as taxas b e d para estimar quantos indivíduos nascem e quantos morrem em cada passo no tempo.
Na primeira parte faremos isso de forma determinística, onde os valores b e d determinam o crescimento da população. Na segunda parte adicionaremos incerteza nos valores b e d, ou seja, o crescimento será com estocasticidade, como se em cada passo, cada indivíduo estivesse lançando uma moeda para decidir se ele sobrevive e se ele se reproduz.
Por fim, iremos fazer um gráfico que mostra o crescimento determinístico e o crescimento estocástico, para que possamos compará-los. Olhe também os valores apresentados no final da execução da função e note como a diferença entre taxa base e taxa realizada varia com o tamanho da população, tanto para b como para d.
Testar com b=0.14, d=0.08, No = 100, tmax= 50
stocdem <- function(No,b,d,tmax)
{
}
STOCD <- matrix(rep(0, tmax,3)
3. Agora é preciso criar uma matriz com 10 colunas e tmax linhas. Nas colunas colocaremos os seguintes valores: N(t), número de mortes, número de nascimentos, taxa de mortalidade e taxa de natalidade para as duas projeções de crescimento.
registro <- matrix(0,tmax,10)
rownames(registro) <- seq(0:tmax)
colnames(registro) <- c("Ndt", "mort.dt", "nasc.dt", " d.dt", "b.dt", "N.st", "mort.st", "nasc.st", "d.st", "b.st")
registro[1,1] <- No
registro[1,6] <- No
for (t in 1:tmax)
{
}
5.1) Salve o tamanho populacional no tempo anterior, chame de pastN.
5.2) Calcule o número de mortes (d*pastN), chame de “mortes”.
5.3) Calcule o número de nascimentos (b*pastN), chame de “nascim”.
5.4) Coloque o novo tamanho populacional no tempo t+1 na segunda coluna da matriz STOCD, que será o N anterior mais os nascimentos menos as mortes.
STOCD[t+1,2]<-(pastN + nascim - mortes)
if (t<tmax)
{
}
registro[t,2] <-mortes
registro[t,3] <- nascim
registro[t,4] <- d
registro[t,5] <- b
for (t in 1:tmax)
{
}
pastN ← ??
mortes ← 0 ## Crie um objeto que receberá o número de mortes
nascim ← 0 ## Crie um objeto que receberá o número de nascimentos
6.2) Neste exercício nós precisamos criar um procedimento que avalie, ao acaso, se ocorrerá uma morte ou se o organismo continua vivo. Faremos o mesmo para saber se haverá um novo nascimento ou não. Use um for()
que passe por todos os organismos que estejam vivos, ou seja,“pastN”.
<box blue 25% round>
for (i in 1:pastN) {
</box>
<box blue 25% round>
m ← runif(1,min=0,max=1)
</box>
<box blue 25% round>
n← runif(1,min=0,max=1)
</box>
6.2.3) Agora vamos ver se houve uma morte e um nascimento usando um if()
. Ou seja,se o número aleatório da mortalidade for menor que “d”, a taxa de mortalidade, haverá uma morte. O mesmo para a natalidade , se o número aleatório da natalidade for menor que “b”, a taxa de natalidade, haverá um novo nascimento. Faça assim no R:
<box blue 25% round>
if (n<b) {nascim ← nascim+1}
if (m<d) {mortes ← mortes+1}
}
</box>
newN ← ??
6.4) Crie uma condição, usando if(), para colocar o newN na matriz apenas se o valor for maior que zero, pois não existe população com valor negativo.
<box blue 80% round>
if (newN>0) {STOCD[t+1,3] ← newN} ## Para colocar o valor na matriz STOCD
if (t<tmax & newN>0) {registro[t+1,6] ← newN} ## Para colocar o valor na matriz registro
</box>
6.5) Agora coloque o número de mortes, o número de nascimentos, e as taxas de mortalidade e natalidade na matriz registro:
registro[t,7] ← ??
registro[t,8] ← ??
registro[t,9] ← ??/??
registro[t,10] ← ??/??
if (newN⇐0) break # Isso irá interromper o processo (o for()) caso a população atinja 0.
}
7) Representação gráfica
<box blue 100% round>
par(mfrow=c(1,1))
plot(STOCD[,1],STOCD[,2],type=“l”, lty=2, xlab=“tempo (t)”,ylab=“tamanho da população (N)”, ylim=c(0,max(STOCD[,2:3])),main=“Estocasticidade Demográfica”)
lines(STOCD[,1],SoTOCD[,3])
legend(“topleft”,c(“proj determinística”,“proj estocástica”),lty=2:1)
</box>
8) Agora vamos criar uma série de comandos pra retornar alguns valores.
<box blue 100% round>
taxastoc ← registro[which(registro[,6]>0),9:10]
cat(“\nMortalidade determinística:\n”)
cat(“média = ”, mean(registro[,4]),“ var = ”,round(var(registro[,4]),3),“\n”)
cat(“\nMortalidade estocástica:\n”)
cat(“média = ”, mean(taxastoc[,1]),“ var = ”,round(var(taxastoc[,1]),3),“\n”)
cat(“\n”)
cat(“\nNatalidade determinística:\n”)
cat(“média = ”, mean(registro[,5]),“ var = ”,round(var(registro[,4]),5),“\n”)
cat(“\nNatalidade estocástica:\n”)
cat(“média = ”, mean(taxastoc[,2]),“ var =”,round(var(taxastoc[,2]),3),“\n\n”)
</box>
9) Sair e entregar o registro.
return(registro)
}
10) Teste sua função: 
stocdem(100,0.14,0.08,50)
11) Varie o tamanho inicial da população e veja que quanto menor o tamanho da população inicial maior é a variabilidade de resultados possíveis. Repita várias vezes com os mesmos valores para ver o quanto os resultados podem variar.
Para ver uma das formas de fazer esse script, clique aqui.