O crescimento de uma população com estrutura etária pode ser projetado utilizando-se algebra matricial. As matrizes de Leslie contêm informação sobre as taxas de natalidade e mortalidade de diferentes classes etárias de uma população e são uma forma robusta de calcular o crescimento populacional e fazer projeções da população para diferentes cenários. Uma generalização da matriz de Leslie tem a população classificada por estágios (matriz de Leftkovicth), onde um indivíduo de uma dada classe pode, além de morrer ou reproduzir, transitar (crescer/regredir) ou permanecer na classe. Nessa generalização, as taxas vitais básicas (crescimento, sobrevivência e reprodução) estão embutidas nos valores das matrizes de transição onde computamos o efeito que cada classe estado (ou de tamanho) exerce nas outras no ciclo de tempo seguinte. O objetivo desse exercício e entender como podemos tratar população estruturadas com os modelos de matrizes.
Antes de iniciar a construção da função vamos fazer uma multiplicação de matriz no R!
classes etárias.
A <- rbind(c( 0.5000 , 1.0 , 0.75 ), c( 0.6666 , 0 , 0 ), c( 0 , 0.3333 , 0 )) n0 <- matrix(c(20,0,0),ncol=1) A%*%n0
A primeira parte do exercício tem por objetivo demonstrar como uma população estruturada com taxas de natalidade e mortalidade constantes converge para uma distribuição de idades estável, independentemente da distribuição de idades inicial.
if
, e apresentar as condições em que o vetor e a matriz terão dimensões incompatíveis (a barrinha vertical “|” indica “ou”).projmat=function(A,n0) { if ( ( dim(A)[1]!=dim(A)[2] ) | (dim(A)[1]!=length(n0) ) ) { stop ("Matriz de projeção e vetor da população não têm dimensões compatíveis") }
resulta=matrix(n0,nrow=1)
while
para estabelecer a condição em que o ciclo de projeção para quando a proporção de indivíduos em cada classe etária no tempo t+1 for igual à proporção de indivíduos na classe etária no tempo t, com precisão de cinco casas decimais. Este limite de precisão de cinco casas decimais é arbitrário.
<box blue 80%| Dica sobre o while>
O while
é um variante do for
e funciona assim: while(cond) expr
, em que cond
é uma condição que deve ocorrer para continuar os ciclos. O argumento expr
se refere à expressão que você vai apresentar para ser calculada a partir da condição proposta. Note que as condições iniciais devem ser dadas antes, para que o ciclo se inicie.
</box>
t <- 1 ## cria um contador para indexar os ciclos difprop <- 1 ## cria um valor de tolerância para a diferença no primeiro ciclo while (t<=1000 & difprop > 0.00005) ### limita os ciclos { nt <- resulta[t,] ntplus <- A %*% nt Nt <- sum(nt) Ntplus <- sum(ntplus) difprop <- max(abs(ntplus/Ntplus)-(nt/Nt)) resulta <- rbind(resulta,t(ntplus)) t <- t+1 }
for (i in t:(t*2)) { nt <- resulta[i,] ntplus <- A %*% nt resulta <- rbind(resulta,t(ntplus)) }
resulta
. Use os seguintes comandos:tempo=0:(dim(resulta)[1]-1) plot(tempo,resulta[,1],type="l", lwd=2, xlim=c(0,dim(resulta)[1]), ylim=c(0,max(resulta)), xlab="tempo", ylab="numero de individuos") for (i in 2:length(n0)) { lines(tempo,resulta[,i],type="l", lty=i, col=i) }
<box 90% blue |Dicas para calcular o valor reprodutivo>
Como sua função retorna a distribuição estável de classe podemos utilizá-la para calcular o valor reprodutivo (vr) de cada classe na população, basta inverter a matriz de transição e calcular as classes estáveis dessa matriz transposta. Esse valor é proporcional ao vr das classes. Para finalizar basta dividir esse resultado pelo valor da primeira classe e terá o valor reprodutivo relativo à primeira classe:
proj.t=proj.mat(t(A),n0)
vr=proj.t$dist.estavel
vr=vr/vr[1]
</box>
auto <- eigen(mat) auto.valor <- max(Re(auto$values)) lamb0=round(auto.valor,4) vetor.direito <- Re(auto$vectors[,1]) distr <-vetor.direito/sum(vetor.direito) diest0 <- round(distr,4)
t
.tmat <- t(mat) autot=eigen(tmat) v <- Re(autot$vectors[,1]) vr <- v/v[1] vr0=round(vr,4) }
Vamos utilizar para esse exercício a matriz de transição para uma população de palmito (Euterpe edulis Mart.) publicada por Frenckleton e colaboradores (2002). Os dados foram coletados pela pesquisadora Dalva da Silva Mattos durante o seu mestrado e doutorado (hoje professora na Federal de São Carlos) , na Reserva de Santa Genebra, Campinas.
ESTÁGIO MATRIZ DE TRANSIÇÃO até 3 folhas 0.51 0 0 0 0 0 98 4 folhas e DAS < 10.1 mm 0.496 0.76 0 0 0 0 0 DAS = 10,1 a 20 mm 0 0.11 0.74 0 0 0 0 DAS = 20,1 a 30 mm 0 0 0.2 0.61 0 0 0 DAS = 30,1 a 60 mm 0 0 0 0.39 0.8 0 0 DAS = 60,1 a 120 mm 0 0 0 0 0.18 0.78 0 DAS > 120 mm 0 0 0 0 0 0.19 0.99
Aqui vc. pode baixar o arquivo .txt, separado por tabulação da matriz de transição do Palmito.
read.table(“transpalmito.txt”, header=F, sep=“\t”, as.is=T)→trans.palm
str(trans.palm)
Número de indivíduos no tempo inicial:
n(t) até 3 folhas 2877 4 folhas e DAS < 10.1 mm 4593 DAS = 10,1 a 20 mm 2186 DAS = 20,1 a 30 mm 1141 DAS = 30,1 a 60 mm 1462 DAS = 60,1 a 120 mm 620 DAS > 120 mm 22
Para produzir essa matriz de tempo inicial use a função matrix.
palm.t0=matrix(c(2877,4593,2186,1141,1462,620,22),ncol=1)
Os indivíduos foram classificados em sete estágios, em função de seu tamanho. As taxas de transição e fertilidade foram estimadas para intervalos de um ano. Seguem algumas informações sobre essa matriz de transição.
Para alcançar o segundo objetivo, precisamos modificar nossa função. Dicas:
Veja se funciona!!! Teste vários níveis de extração e veja se a população permanece viável… Discuta o resultados com seus colegas e responda a pergunta inicial.
BIBLIOGRAFIA