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:
  1. O que significa o vetor resultante da multiplicação?
  2. 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.

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

<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>

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 matriz de transição do Palmito.

  1. 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.

  1. 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.
  2. 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.
  3. 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

  1. 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.
  2. 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

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.

exercicios/ex_mat.txt · Última modificação: 2024/01/09 18:18 por 127.0.0.1
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