====== Matriz de Leslie ======
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!
* Determinar uma **matriz de projeção** e um **vetor inicial de abundâncias** para uma população com três
classes etárias.
* Por exemplo:
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
* Perguntas:
- O que significa o vetor resultante da multiplicação?
- O que aconteceria se multiplicássemos o vetor resultado pela matriz de transição muita vezes? Vamos fazê-lo:
===== Função Base =====
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.
==== Distribuição Estável ====
* 1. Relaxe, respire profunda e calmamente... não durma!
* 2. Criar uma **função** para projetar o crescimento da população estruturada e representar o crescimento num **gráfico**. Os argumentos são a matriz de transicão: //A// e o número de indivíduos em cada classe (etária ou estágio): //n0//.
* 3. Checar se o vetor //n0// e a matriz //A// têm as mesmas dimensões. Usar o comando ''if'', e apresentar as condições em que o vetor e a matriz terão dimensões incompatíveis (a barrinha vertical "|" indica "ou").\\ Você pode tentar assim:\\
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")
}
* 4. Criar uma matriz que receberá a projeção da população. No início essa matriz terá apenas uma linha e o número de colunas equivalente ao comprimento de n0.
* 5. Guarde n0 na primeira linha de resulta
resulta=matrix(n0,nrow=1)
* 6. Projetar a população até atingir a distribuição etária estável. Isto acontecerá quando a distribuição etária no tempo t+1 for igual à distribuição etária no tempo t.
* 6.1. Multiplique a matriz **A** pelo vetor de abundância no tempo //t// (**nt**) para projetar o tamanho de cada classe no tempo //t+1//.
* 6.2. Vamos utilizar o comando ''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.
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.
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
}
* 6.3. Agora só falta estabelecer o que a função irá retornar e fechá-la.
* 6.4. Teste a função com a matriz de transição //A// e //n0//.
* 6.5. Confira se a proporção de indivíduos de cada classe está constante nos últimos tempos.
==== Parte 2 Gráfico ====
* 7. Para fazer a representação gráfica, vamos projetar um pouco mais a nossa população, duplicando o número de passos no tempo. Ou seja, vamos projetar pelo dobro do tempo que demorou para estabilizar a distribuição etária.
* 8. Vamos alterar a função projmat para ela projetar mais tempo, criando um segundo ciclo com a função //for//.
* 8.1. Crie um contador que vá de //t// até //t*2//:
* 8.2. Da mesma forma que nos ciclos anteriores vamos pegar o vetor da população do tempo //t// e projetar para //t+1//
* 8.3. A cada ciclo acrescentamos a linha //ntplus// no objeto matriz **resultado**
** note que diferente de outros ciclos que fizemos, nesse estamos acrescentando linhas no resultado e não transportando os valores calculados para um objeto resultado.
for (i in t:(t*2))
{
nt <- resulta[i,]
ntplus <- A %*% nt
resulta <- rbind(resulta,t(ntplus))
}
* 9. Faça uma representação gráfica de **resulta**. O gráfico será a projeção do crescimento da população de acordo com a matriz de Leslie, **A**, em que cada linha representará uma classe etária, em seguida feche a função e retorne ''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)
}
* 10. Sabendo que o crescimento populacional discreto (lambda) é igual a //Nt/No//, calcule o lambda assintótico com o resultado da projeção da sua função.
* 10.1. Salve o resultado de uma projeção (use os argumento que achar mais conveniente) em um objeto (p.ex: //proj1= projmat(A, n0)//).
* 10.2. No objeto resultante aplique a função //apply// para somar as os valores das linhas (//Nt=apply(proj1,1,sum)//)
* 10.3. Calcule o lambda para cada transição: //lamb=Nt[2:length(Nt)]/Nt[1:(length(Nt)-1)]//
* 10.4. Faça um gráfico de lambda no tempo e veja se há alguma assíntota: //plot(1:lengt(lamb), lamb, xlab=tempo, ylab = lambda)//
* 11. Inclua na sua função (//proj.mat//) a impressão na tela dos valores da distribuição estável de classes e do lambda assintótico.
* 12. Faça sua função retornar em uma lista: projeção da população (resulta), lambda e valores de distribuição estável.
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]
==== Projeção x Algebra Linear ====
* 13. Agora, vamos encontrar a distribuição estável de classes e o valor de lambda diretamente a partir da matriz de transição, com a ajuda de um pouco mais de algebra matricial. Para tanto calcularemos os autovalores e vetores da matriz de transição. Use os seguintes comandos:\\
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)
* 14. O último passo é obter o valor reprodutivo, que é o número relativo de descendentes esperado para indivíduos de uma certa classe etária. Este valor é igual ao primeiro autovetor à esquerda da Matriz de Leslie, ou, por outras palvras, o primeiro vetor próprio da transposta da Matriz de Leslie. Vamos usar a transposta, isto é uma transformação da matriz em que as linhas passam a colunas e as colunas passam a linhas.
* 14.1. Transponha a matriz de Leslie. Use a função ''t''.\\
* 14.2. Como já vimos que a projeção é só uma forma de chegar aos mesmos resultados de uma maneira mais indireta, vamos obter o vetor de valores reprodutivos através da função //eigen//. Use os seguintes comandos:\\
tmat <- t(mat)
autot=eigen(tmat)
v <- Re(autot$vectors[,1])
vr <- v/v[1]
vr0=round(vr,4)
}
* 15. Junte o passo 13 e 14 em uma outra função chamada **auto.mat**. Faça ela retornar: lambda, distribuição estável, valores reprodutivos.
* 16. Teste com várias matrizes diferentes mexendo nas sobrevivências e fertilidades para alterar o valor reprodutivo das diferentes classes.
----
===== Manejando o Palmito =====
==== Extração de palmito é sustentável? ====
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 {{:bie5786:exercicios:trans.palmito.txt.pdf|matriz de transição do Palmito}}.
- salve no mesmo diretório de trabalho em que está usando o R, retire a extensão .pdf deixando o arquivo só com o trans_palmito.txt. Utilize a função //read.table// para ler o arquivo no R e depois //str// para ver a estrutura do arquivo.
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.
- Os adultos são as árvores do último estágio, e são os únicos a se reproduzir. Os autores estimaram que cada adulto produz, em média, 98 indivíduos do primeiro estágio de um ano a outro. Localize este número na matriz.
- As taxas de transição variam bastante entre classes. Localize-as na matriz. A mais alta é para a passagem da primeiro para o segundo estágio. Em um ano, cerca de metade dos indivíduos do primeiro estágio passam ao segundo. Localize esta taxa na matriz.
- Usando estágios de desenvolvimento ao invés de classe de idade, é possível que os indivíduos permaneçam na mesma classe de um tempo a outro. Por isso a matriz de transição tem também probabilidades de permanência. Localize essas probabilidades.
==== Objetivos ====
- Primeiro vamos calcular a taxa de crescimento populacional e a distribuição etária estável para essa população, utilizando a função que montamos.
- Vamos avaliar o impacto da extração de adultos reprodutivos sobre essa população. Modelaremos uma extração de uma fração fixa dos adultos a cada ano, antes que eles se reproduzam. O percentual de adultos extraídos está na célula M2.
Para alcançar o segundo objetivo, precisamos modificar nossa função. Dicas:
* Insira um argumento para estabelecer qual o tempo que vc. quer projetar sua população manejada e outro para estabelecer qual a taxa de extração de adultos em cada ano.
* Insira dentro do ciclo de cálculo do vetor de tamanho da população no tempo t+1 um linha que reduza o tamanho projetado dos adultos pela proporção de manejo desejado.
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
{{:ecopop:exercicios:matrizdinamicajaecol2003.pdf|Frenckleton, R.P., Silva Matos, D.M., Bovi, M.L.A & Watkinson, A.R. 2003. Predicting the impacts of harvesting using structured population models: the importance of density-dependence and timing of harvest for a tropical palm tree. Journal of Applied Ecology 40: 846-858.
}}