Modelos Densidade Independente

Em uma população onde as taxas de nascimento e mortalidade são constantes (não são afetadas pelo tamanho da população), dizemos que essa população tem um crescimento independente da densidade dela própria. Essa situação é geralmente relacionada a uma ausência de restrição ao crescimento, onde os recursos são ilimitados, mas pode também estar associada a uma depleção de recursos e à extinção da população.

Taxa de crescimento

Vamos imaginar agora uma população hipotética com taxas constante de crescimento e mortalidade e sem migrações. A cada ciclo de tempo relacionado a uma geração (T), o tamanho da população é o resultado do número de indivíduos da geração anterior mais números de nascimentos (B), menos mortes (D).

$$N_{T+1} = N_T + B - D $$

Podemos relacionar o número de mortes e nascimentos a um valor per capita:

  • $ B=bN_T $
  • $ D=dN_T $

onde: b = taxa de nascimento per capita a cada geração ; d = taxa de mortalidade per capita a cada geração. Note que a taxa não muda com o tamanho da população, entretanto, o número de nascimentos e mortes é proporcional ao tamanho populacional. Vamos apenas deixar claro mais uma premissa, para fins didáticos: os nascimentos e mortalidades ocorrem simultaneamente na população (p.ex: uma planta anual). Sendo T a escala de uma geração, podemos então dizer que :

  • $N_{T+1} = N_T + bN_T-dN_T $
  • $N_{T+1} = N_T + (b-d)N_T $

se: $r_T = b-d$ ; fator de crescimento discreto

  • $N_{T+1} = (1+r_T)N_T$
  • $\frac{N_{T+1}}{N_T} = 1+r_T$

Como $ 1+r_T $ é uma constante, vamos designá-la como $\lambda$, um número positivo que mede o aumento proporcional da população de uma geração a outra. Portanto:

  • $\lambda=\frac{N_{T+1}}{N_T} $, ou:

$$ N_{T+1} = \lambda N_T$$

Projetando a População

Podemos então projetar a nossa população a cada ciclo de tempo (gerações). Por exemplo:

Se uma população com 100 indivíduos tem uma taxa per capita de natalidade de 0,8/ano e de mortalidade de 0,75/ano, qual o tamanho esperado da população no próximo ano?

N0=100
lamb=1+(0.8-0.75)
Nt1=N0*lamb
Nt1

Podemos também projetar a população para outras gerações, usando iterações:

(Nt2=Nt1*lamb)
(Nt3=Nt2*lamb)
(Nt4=Nt3*lamb)

Note que:

  • $N_{T4}= N_{T0} \lambda \lambda\lambda\lambda $
  • $N_{T4}= N_{T0} \lambda^4 $

Essa equação recursiva pode ser escrita como:

$$N_{T}=\lambda^T N_0 $$

Vamos pegar nosso exemplo anterior e projetá-lo para 10 ciclos de tempo.

N0=100
lamb=1+(0.8-0.75)
tmax=10
tseq=0:tmax
Nseq=N0*lamb^tseq
Nseq
plot(tseq, Nseq, type="l")

Tamanho Inicial

Vamos agora explorar o tamanho inicial da população.

  • $N_0 = 10,20,30, 40 $
  • $\lambda = 1,5$
  • $ tempo = 1:10$
tseq=0:10
lamb=1.5
N0=c(10,20,30,40)
N0.mat=matrix(N0, ncol=length(tseq), nrow=length(N0))
N0.mat
lamb_t=lamb^tseq
lambt_mat=matrix(lamb_t,ncol=length(tseq), nrow=length(N0), byrow=TRUE)
Nt=N0.mat*lambt_mat
colnames(Nt)<-paste("t", 0:10, sep="")
rownames(Nt)<-paste("N0", c(10,20,30,40), sep="_")
Nt
matplot(0:10,t(Nt))

Vamos agora colocar o mesmo gráfico em uma escala logarítmica para o eixo y.

par(mfrow=c(1,2))
matplot(0:10,t(Nt))
matplot(0:10, t(Nt), log="y")

O que está acontecendo?? Parece que todas as populações crescem igualmente quando estamos em uma escala logarítmica! Vamos investigar a equação que estamos usando, $N_t=\lambda^T N_0$ e tirar o log dos dois lados da equação:

  • $log{N_T} = log{\lambda^T N_0}$
  • $ log{N_T} = (log{\lambda}) T + log{N_0} $

Essa equação lembra uma equação da reta $ y=ax+b $, onde o intercepto é $log(N_0)$ e a inclinação é iqual a $log{\lambda}$.

Desafio

  • Demonstre graficamente que a inclinação das populações do exemplo acima são iguais a $log{\lambda}$.

Média do Crescimento Populacional

Vamos agora investigar os dados do tamanho populacional de uma espécie de pardal norte-americano (Melopiza melodia) partindo da premissa que essa população cresce em tempo discreto, já que os nascimentos ocorrem em um intervalo curto de tempo de nidificação a cada ano.

O gráfico representa a contagem de pardais cantores na cidade de Darrtown, OH, USA. Baixe os dodos do arquivo pardal.txt no seu computador.

Vamos calcular os $\lambda$ para os cinco primeiros intervalos:

pardal<-read.table("pardal.txt", header=TRUE, sep="\t", as.is=TRUE)
str(pardal)
head(pardal)
pardal6= pardal[1:6,]
plot(pardal6$Count ~pardal6$Year)
lamb_pardal=pardal6$Count[2:6]/pardal6$Count[1:5]
lamb_pardal

Agora, vamos calcular a projeção da população pela média aritmética e geométrica dos $\lambda$ e desenhar as projeções junto com os dados observados!

#media aritmetica
(lamb.art = mean(lamb_pardal))
#media geometrica 
(lamb.geo = prod(lamb_pardal)^(1/5))
tseq=0:5
plot(tseq, pardal6$Count, pch=19)
N0=pardal6$Count[1]
lines(tseq, N0*lamb.art^tseq, lty=2, col="red") 
lines(tseq, N0*lamb.geo^tseq, lty=3, col="blue") 
  • Qual das duas médias parece se ajustar melhor aos dados observados? Por quê?

Crescimento Discreto

Abaixo tem o código de uma função base para a projeção do crescimento crescimento de uma população, que pode ser usada como estrutura básica para outras funções que iremos desenvolver no curso. No caso, é uma funcão com 3 argumentos: número de indivíduos no tempo 0 (N0), taxa de crescimento populacional (lamb) e o tempo máximo (tmax) de projeção da população.

cresc.geom= function(No=100, lamb=1.04, tmax=10)
{
resulta <- rep(NA,tmax)
resulta[1] <- No
	for (i in 2:tmax)
	{
	tam=resulta[i-1]*lamb
	resulta[i]=tam
	}
return(resulta)
}

Ao copiar esse código na área de trabalho do R, um novo objeto é criado, de nome cresc.geom. Ele é um objeto da classe função que você pode usá-lo digitando o seu nome e especificando seus argumentos, como no exemplo a seguir:

 
resultado <- cresc.geom(No=10, lamb=0.98, tmax=100)

Note que o resultado da função, nesse caso, será guardado no objeto resultado. Para fazer um gráfico dos resultados pode utilizar o código abaixo:

plot(1:length(resultado), resultado)  

Crescimento Contínuo

Nem todos os organismos são como plantas que tem uma época reprodutiva bem definida e que, em parte, podem ser modelados com o tempo discreto. Mesmo partindo da premissa que todos os nascimentos ocorrem em um curto intervalo de tempo anualmente (como no caso dos pardais), a mortalidade ocorre continuamente nessas populações. Para a grande maioria das populações nascimentos ocorrem praticamente a qualquer instante e são assincrônicas, o crescimento discreto não parece uma boa descrição desse fenômeno. Vamos modelar uma população que tem uma taxa de crescimento anual de $\lambda = 1,5$.

  • $N_1=N_0 \lambda$ , ou:
  • $N_1=N_0 (1+ rd)$ , onde rd = coeficiente discreto de crescimento
  • $N_1= N_0(1 + 0.5)$

Agora, vamos supor que essa mesma população tenha dois ciclos reprodutivos anuais, portanto temos que modelar seu crescimento por semestre, o que equivale a dizer que:

  • $N_1=N_0 (1+0.5/2)^2 -> N_0(1+0.25)^2$

Ou seja, essa população tem uma taxa de crescimento de $\lambda = 1+ 0.25 $ por semestre. Trimestralmente teria uma taxa de (1 + 0.5/4)^4 e assim por diante, podemos então descrever:

$$ \frac{N_1}{N_0}= (1+\frac{r_d}{n})^n $$

O que acontece se deixarmos o número de frações de tempo cada vez maior, tendendo a um número infinitamente grande?

$$ \lim\limits_{\to \infty}(1+\frac{r_d}{n})^n$$

Vamos tentar resolver o limite acima de forma bruta, aumentando o número de divisões dentro de um ano da nossa taxa de crescimento discreta. A principio vamos deixar o $\lambda =2$, portanto o $r_d=1$ e o $N_0=1$ ; portanto $\frac{N_t}{N_0}= N_t$. Em seguida vamos fazer $\lambda =3$ e $\lambda =1.5$ (r=2 e r=0.5).

##############################
#### Crescimento Contínuo ####
##############################

n<- c(0:100, 200, 500,1000, 10000, 100000,1e+10)
N0 <- 1
rd1 <- 1  
N1<-N0* (1+ rd1/n)^n
N1_N0= N1[length(N1)]/N0
plot(1:103, N1[1:103]/N0, type="l")
text(x=50, y=2.5, labels= paste("Máximo = ", N1[length(N1)/N0]))
N1_N0
exp(1)

rd2=2
N1a<-N0* (1+ rd2/n)^n
N1a_N0= N1a[length(N1a)]/N0
N1a_N0
exp(2)

rd.5=0.5
N1b<-N0* (1+ rd.5/n)^n
N1b_N0= N1b[length(N1b)]/N0
N1b_N0
exp(0.5)

Acima, demostramos na força bruta que:

$$ \lim\limits_{\to \infty}(1+\frac{r_d}{n})^n = e^r$$

Ou seja:

$$\frac{N_t}{N_0}=e^{rt} $$ $$N_t= N_0 e^{rt}$$

Chegamos a equação de crescimento contínuo!! Além disso, chegamos a relação entre a taxa intrínseca de crescimento instantâneo e a taxa de crescimento discreto da população:

$$ \lambda = e^r $$ ou $$ r = log_n(\lambda)$$

Equação diferencial

O mesmo problema do crescimento contínuo pode ser abordado de outra forma, utilizando uma equação diferencial. Nesse caso, podemos dizer que a taxa de variação instantânea da população é igual a uma taxa intrínseca de crescimento (r), multiplicado pelo tamanho da população (N).

$$ \frac{dN}{dt}=rN $$

O Maxima pode nos ajudar a solucionar a equação diferencial. Digite as seguintes expressões, indicando que você quer resolver (ode2) a equação diferencial acima:

diff(N(t),t)=r*N(t);
ode2(%, N(t), t);

O resultado deve ser:

$ N(t)=c * e^{rt} $

Como o c representa o intercepto ou a situação inicial do sistema, o nosso $N_0$, chegamos novamente a:

$$ N_t= N_0 e^{rt} $$

Função Crescimento Exponencial

A partir da função cresc.geom, vamos criar uma função de crescimento contínuo exponencial. Há várias formas de fazê-la, mas vamos usar uma lógica que, apesar de não ser a mais eficiente 1), vai nos ajudar em outro passos de exercícios futuros. Basicamente, temos que mudar:

  • 1. nome da função: cresc.exp
  • 2. argumentos: lamb para rc
  • 3. a linha:
tam=resulta[i-1]*lamb

muda para

 tam=resulta[i-1]*exp(rc) 

O resto permanece como estava:

cresc.exp= function(No=100, rc=0.04, tmax=10)
{
....
	tam=resulta[i-1]*exp(rc)

....
}

Estocasticidade Ambiental

Flutuações ambientais podem exercer efeito na taxa de crescimento instantâneo da população. De uma forma simples, podemos imaginar que essa variação funcione como um ruído no r, como se a população em média tivesse uma taxa, mas a cada realização ela pudesse ser um tanto diferente devido a condições externar a ela própria. A implementação dessa estocasticidade ambiental em modelos contínuos é um pouco mais complicada, mas podemos imaginá-la como realizações em algum intervalo pequeno de tempo. Para um crescimento discreto a construção de simulações com estocasticidade ambiental é mais intuitivo: a cada realização o Lambda é afetado pela variação ambiental. Vamos fazê-la.

npop=10
n0=10
lamb.med = 1.2
lamb.sd= 0.4
lamb = rnorm(npop, mean=lamb.med, sd=lamb.sd)
N0=rep(n0,npop)
N1=lamb*N0
lamb=rnorm(npop, mean=lamb.med, sd=lamb.sd)
N2=N1*lamb
N3=N2*rnorm(npop,mean=lamb.med,sd=lamb.sd)
N4=N3*rnorm(10,mean=lamb.med,sd=lamb.sd)
N5=N4*rnorm(10,mean=lamb.med,sd=lamb.sd)
Nt<-rbind(N0,N1,N2,N3,N4,N5)
matplot(0:5, Nt, type="l", lty=2:7)

Desafio

É possível adaptar a nossas função anterior de crescimento discreto para que possa também modelar populações com estocasticidade ambiental!

Dicas

O primeiro passo sempre e pensar quais argumentos vamos precisar Nesse caso, temos apenas mais um argumento o lamb.dp : o desvio padrão de lambda. O resto continua o mesmo, lembre-se que se o lamb.dp for 0, nosso população é determinística! Ou seja, a mesma função pode se prestar para simular ambos cenários.

1) nem de perto
exercicios/exerc2.txt · Última modificação: 2012/05/16 11:33 por adalardo
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0