====== 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. }}