Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
mod1:mat_apoio:meta_chuva [2010/08/16 16:55] adalardomod1:mat_apoio:meta_chuva [2024/01/11 15:21] (atual) – edição externa 127.0.0.1
Linha 1: Linha 1:
 ====== Chuva de Propágulos ====== ====== Chuva de Propágulos ======
-{{:mod1:restr:chuva.jpg?150| Ênio e Beto andando na chuva http://desenhos.kids.sapo.pt/a-chuva.htm}}+{{mod1:mat_apoio:chuva.jpg?150| Ênio e Beto andando na chuva http://desenhos.kids.sapo.pt/a-chuva.htm}}
  
-Neste exercício((roteiro produzido pelo monitor Marcel Vaz a partir de material do curso de [[http://ecologia.ib.usp.br/bie5786|Ecologia de Populações]] do nosso programa de pós-graduação em ecologia)) , iremos simular a dinâmica de uma metapopulação onde as taxas de extinção e de colonização são constantes (modelo de chuva de propágulos). Neste modelo há sempre uma fonte constante de imigrantes que podem colonizar qualquer mancha vazia. Relembrando, o modelo da dinâmica (variação da fração de manchas ocupadas no tempoé descrito pela seguinte fórmula:+Neste exercício((roteiro produzido pelo monitor Marcel Vaz a partir de material do curso de [[http://ecologia.ib.usp.br/bie5786|Ecologia de Populações]] do nosso programa de pós-graduação em ecologia)) , iremos simular a dinâmica de uma metapopulação onde as probabilidades de extinção e de colonização de manchas são constantes (modelo de chuva de propágulos). Neste modelo há sempre uma fonte constante de imigrantes que podem colonizar qualquer mancha vazia. Relembrando, variação da fração de manchas ocupadas no tempo é descrito pela seguinte fórmula geral:
 <m14> <m14>
 df/dt=I - E df/dt=I - E
-</m> +</m>, onde I é a taxa de entrada de migrantes, e E a taxa de saída. A partir dele podemos definir um modelo simples para a dinâmica de ocupação de manchas que formam uma metapopulação:
  
  
Linha 14: Linha 14:
 onde <m14>p_i</m> é a probabilidade de imigração ou colonização, <m14>p_e</m> é a probabilidade de extinção e <m14>f</m> é a fração de manchas ocupadas (número de manchas ocupadas / número total de manchas). onde <m14>p_i</m> é a probabilidade de imigração ou colonização, <m14>p_e</m> é a probabilidade de extinção e <m14>f</m> é a fração de manchas ocupadas (número de manchas ocupadas / número total de manchas).
  
-Em primeiro lugar, vamos estabelecer a probabilidade de colonização de manchas vazias (pi), a probabilidade de extinção em manchas ocupadas (pe) e a fração inicial de manchas ocupadas (fi) como 30%, 15% e 50%, respectivamente.+Em primeiro lugar, vamos estabelecer a probabilidade de colonização de manchas vazias (pi), a probabilidade de extinção em manchas ocupadas (pe) e a fração inicial de manchas ocupadas (fi) como 30%, 15% e 40%, respectivamente.
 <code> <code>
 pi=0.3 pi=0.3
 pe=0.15 pe=0.15
-fi=0.5+fi=0.4
 </code> </code>
  
Linha 34: Linha 34:
 Ótimo! Agora temos nossa paisagem em 10 tempos diferentes. Ótimo! Agora temos nossa paisagem em 10 tempos diferentes.
  
-Finalmente, antes de começarmos a brincadeira, precisamos definir quais manchas estarão ocupadas no tempo inicial. Vamos combinar que quando a mancha está ocupada ela recebe o valor 1 e quando está vazia recebe o valor 0. Do jeito que a matriz está, repleta de zeros, nenhuma mancha está ocupada. Então vamos preencher ao acaso algumas manchas, usando um fi de 50%:+Finalmente, antes de começarmos a brincadeira, precisamos definir quais manchas estarão ocupadas no tempo inicial. Vamos combinar que quando a mancha está ocupada ela recebe o valor 1 e quando está vazia recebe o valor 0. Do jeito que a matriz está, repleta de zeros, nenhuma mancha está ocupada. Então vamos preencher ao acaso algumas manchas, usando um fi de 40%:
 <code> <code>
-paisag[,,1]=sample(c(rep(0,(100-fi*100)),rep(1,fi*100)))+fi 
 +1-fi 
 +rep(1fi*100
 +ocor<-rep(1,fi*100) 
 +nocor<-rep(0,(1-fi)*100) 
 +nocor 
 +c(ocor,nocor) 
 +sample(c(ocor,nocor)) 
 +paisag[,,1]<-sample(c(ocor,nocor))
 paisag[,,1] paisag[,,1]
 </code> </code>
Linha 51: Linha 59:
 Calma, não se assuste. O monstrinho abaixo vai tratar apenas das manchas que estavam ocupadas no tempo inicial. Calma, não se assuste. O monstrinho abaixo vai tratar apenas das manchas que estavam ocupadas no tempo inicial.
 <code> <code>
 +sum(paisag[,,1]) # numero de manchas ocupadas no tempo 1
 paisag[,,2][paisag[,,1]==1]<-sample(c(0,1),sum(paisag[,,1]),replace=T,prob=c(pe,1-pe)) paisag[,,2][paisag[,,1]==1]<-sample(c(0,1),sum(paisag[,,1]),replace=T,prob=c(pe,1-pe))
 paisag[,,2] paisag[,,2]
Linha 68: Linha 77:
 Mas essa é apenas metade da história, não? Estamos esquecendo que as manchas vazias podem ser ocupadas. Vamos simular a colonização com um outro monstrinho: Mas essa é apenas metade da história, não? Estamos esquecendo que as manchas vazias podem ser ocupadas. Vamos simular a colonização com um outro monstrinho:
 <code> <code>
-paisag[,,2][paisag[,,1]==0]<-sample(c(0,1),10*10-sum(paisag[,,1]),replace=T,prob=c(1-pi,pi))+length(paisag[,,1]) ## esse é o tamanho da nossa paisagem ou o número de manchas! 
 +nmanchas=length(paisag[,,1]) ## vamos guardar esse valor que não muda durante toda a simulação 
 +paisag[,,2][paisag[,,1]==0]<-sample(c(0,1),nmanchas-sum(paisag[,,1]),replace=T,prob=c(1-pi,pi))
 paisag[,,2] paisag[,,2]
 </code> </code>
Linha 82: Linha 93:
 Note que algumas manchas que estavam ocupadas no tempo 1 ficaram vazias no tempo 2 e vice-versa. Note também que algumas manchas continuaram vazias e outras continuaram ocupadas. O próximo passo é calcular a fração de manchas ocupadas inicialmente (f1) e no tempo 2 (f2) e depois a diferença entre elas: Note que algumas manchas que estavam ocupadas no tempo 1 ficaram vazias no tempo 2 e vice-versa. Note também que algumas manchas continuaram vazias e outras continuaram ocupadas. O próximo passo é calcular a fração de manchas ocupadas inicialmente (f1) e no tempo 2 (f2) e depois a diferença entre elas:
 <code> <code>
-f1=sum(paisag[,,1])/100 # fração das manchas ocupadas no tempo 1 +nmanchas 
-f2=sum(paisag[,,2])/100 # fração das manchas ocupadas no tempo 2+f1=sum(paisag[,,1])/nmanchas# fração das manchas ocupadas no tempo 1 
 +f2=sum(paisag[,,2])/nmanchas # fração das manchas ocupadas no tempo 2
  
 f1 f1
Linha 92: Linha 104:
 <code> <code>
 paisag=array(0,dim=c(10,10,10)) paisag=array(0,dim=c(10,10,10))
-paisag[,,1]=sample(c(rep(0,(100-fi*100)),rep(1,fi*100)))+nmanchas=length(paisag[,,1]) 
 +paisag[,,1]=sample(c(rep(0,((1-fi)*nmanchas)),rep(1,fi*nmanchas)))
 resultado=numeric() resultado=numeric()
-for(t in 2:10){ +for(t in 2:10) 
-        paisag[,,t][paisag[,,(t-1)]==1]<-sample(c(0,1),sum(paisag[,,1]),replace=T,prob=c(pe,1-pe)) +               
-        paisag[,,t][paisag[,,(t-1)]==0]<-sample(c(0,1),10*10-sum(paisag[,,1]),replace=T,prob=c(1-pi,pi)) +        paisag[,,t][paisag[,,(t-1)]==1]<-sample(c(0,1),sum(paisag[,,(t-1)]) ,replace=T, prob=c(pe,1-pe)) 
-        resultado[t-1]=sum(paisag[,,t])/(10*10)+        paisag[,,t][paisag[,,(t-1)]==0]<-sample(c(0,1),nmanchas - sum(paisag[,,(t-1)]), replace=T,prob=c(1-pi,pi)) 
 +        resultado[t-1]=sum(paisag[,,t])/nmanchas
        }        }
 resultado resultado
Linha 133: Linha 147:
 metapop=function(tf,c,l,fi,pi,pe){ metapop=function(tf,c,l,fi,pi,pe){
  paisag=array(0,dim=c(l,c,tf))  paisag=array(0,dim=c(l,c,tf))
- paisag[,,1]=sample(c(rep(0,round(c*l-fi*c*l)),rep(1,round(fi*c*l))))+        nmanchas=c*l 
 + paisag[,,1]=matrix(sample(c(1,0),nmanchas,prob=c(fi,1-fi), replace=T),l,c)
  resultado=numeric()  resultado=numeric()
  for(t in 2:tf){  for(t in 2:tf){
-        paisag[,,t][paisag[,,(t-1)]==1]<-sample(c(0,1),sum(paisag[,,1]),replace=T,prob=c(pe,1-pe)) +        paisag[,,t][paisag[,,(t-1)]==1]<-sample(c(0,1),sum(paisag[,,(t-1)]), replace=T, prob=c(pe,1-pe)) 
-        paisag[,,t][paisag[,,(t-1)]==0]<-sample(c(0,1),c*l-sum(paisag[,,1]),replace=T,prob=c(1-pi,pi))+        paisag[,,t][paisag[,,(t-1)]==0]<-sample(c(0,1),c*l-sum(paisag[,,(t-1)]), replace=T, prob=c(1-pi,pi))
         resultado[t-1]=sum(paisag[,,t])/(c*l)         resultado[t-1]=sum(paisag[,,t])/(c*l)
        }        }
Linha 144: Linha 159:
  
  plot(1:tf,c(fi,resultado),type="l",xlab="Tempo",ylab="Fração de manchas ocupadas",  plot(1:tf,c(fi,resultado),type="l",xlab="Tempo",ylab="Fração de manchas ocupadas",
- ylim=c(0,1),main="Dinâmica de ocupação de manchas",font.lab=2,lwd=2)+ ylim=c(0,1),main=paste("Chuva de Propágulos","\n c=",c," l=",l," fi=",fi," pi=",pi," pe=",pe),font.lab=2,lwd=2)
  abline(h=F,col=2,lwd=2,lty=2)  abline(h=F,col=2,lwd=2,lty=2)
   
Linha 151: Linha 166:
 </code> </code>
  
-Maravilha! A função acima tem 6 parâmetros (tf, c, l, fi, pi e pe), mas para que a função funcione é preciso atribuir um valor para cada parâmetro, como no exemplo abaixo:+Maravilha! A função acima tem 6 argumentos (tf, c, l, fi, pi e pe), mas para que a função funcione é preciso atribuir um valor para cada argumento, como no exemplo abaixo:
 <code> <code>
 metapop(tf=100,c=10,l=10,fi=0.5,pi=0.3,pe=0.15) metapop(tf=100,c=10,l=10,fi=0.5,pi=0.3,pe=0.15)
Linha 163: Linha 178:
   * pe - probabilidade de extinção   * pe - probabilidade de extinção
 </box> </box>
 +
 Agora é com vocês! Tentem responder às seguintes perguntas: Agora é com vocês! Tentem responder às seguintes perguntas:
 +  * Quando você rodar várias mais de uma vez a função com os mesmos parâmetros o resultado é o mesmo? Por quê?((Você deve entender isto para responder várias das questões seguintes.))
   * O que acontece quando o número de manchas é muito grande? E quando é muito pequeno?   * O que acontece quando o número de manchas é muito grande? E quando é muito pequeno?
   * E quando a fração inicial (fi) é muito diferente da fração em equilíbrio (F)?   * E quando a fração inicial (fi) é muito diferente da fração em equilíbrio (F)?
-  * Como a população pode se extinguir da paisagem?+  * Quais condições levam à extinção da população na paisagem neste modelo?
   * O que acontece quando as probabilidades de extinção e de colonização são muito altas?   * O que acontece quando as probabilidades de extinção e de colonização são muito altas?
   * E quando elas são muito baixas?   * E quando elas são muito baixas?
-  * O que altera a frequência da trajetória de f? E a amplitude? +   
-  * Do que depende a velocidade com que a trajetória se aproxima do F? +== DICA ==
-  * Em que situações a trajetória chega a coincidir exatamente com a linha do F? +
-  * Quando você rodar várias mais de uma vez a função com os mesmos parâmetros o resultado é o mesmo? Por quê?+
  
 +Para responder às perguntas acima você precisa comparar resultados de diferentes simulações.  Abrir espaço para mais de um gráfico na janela gráfica do R vai ajudar bastante. Para ter 4 gráficos digite na linha de comando do R:
 +
 +<code>
 +par(mfrow=c(2,2))
 +</code>
 +   
 +Os dois números indicam o número de linhas e colunas desejadas, na janela gráfica. No caso, pedimos duas linhas e duas colunas, ou seja, espaço para quatro gráficos. Para voltar a um gráfico apenas na janela digite:
 +
 +<code>
 +par(mfrow=c(1,1))
 +</code>
 + 
 ---- ----
  
Linha 179: Linha 206:
 Para vocês que chegaram vivos até aqui, uma recompensa. Rode os comandos abaixo e descubra: Para vocês que chegaram vivos até aqui, uma recompensa. Rode os comandos abaixo e descubra:
 <code> <code>
-metapop2=function(tf,c,l,fi,pi,pe){ + 
- paisag=array(0,dim=c(l,c,tf)+anima=function(dados){ 
- paisag[,,1]=sample(c(rep(0,round(c*l-fi*c*l)),rep(1,round(fi*c*l)))) +        x11() 
- resultado=numeric() + for(i in 1:dim(dados)[3]
- for(t in 2:tf){ +        { 
-        paisag[,,t][paisag[,,(t-1)]==1]<-sample(c(0,1),sum(paisag[,,1]),replace=T,prob=c(pe,1-pe)+ image(dados[,,i], main=("Ocupação de manchas"),sub=paste("simulação no."i), col=c("white","red"), bty="n",xaxt='n',yaxt='n'
-        paisag[,,t][paisag[,,(t-1)]==0]<-sample(c(0,1),c*l-sum(paisag[,,1]),replace=T,prob=c(1-pi,pi)+ grid(dim(dados)[1],dim(dados)[2]) 
-        resultado[t-1]=sum(paisag[,,t])/(c*l+ Sys.sleep(.2)
-       } +
- return(paisag)+
  }  }
 +}
  
  
-anima=function(tf,c,l,fi,pi,pe){ +simula1<- metapop(20,10,10,1.00.4,0.2
- dados=metapop2(tf,c,l,fi,pi,pe) +anima(simula1
- for(i in 1:tf){ +
- image(dados[,,i], main=("Ocupação de manchas"),col=c("white","red"),bty="n",xaxt='n',yaxt='n'+
- grid(c,l+
- Sys.sleep(.5) +
-+
- }+
  
-anima(tf=25,c=10,l=10,fi=.1,pi=0.1,pe=0.1) 
 </code> </code>
  
-Aqui você também pode mexer nos parâmetros e ver, literalmente, que acontece:+Para fazer rodar a animação você precisa apenas salvar resultado da função //metapop//  e chamar esse objeto na função anima. Para modificar parmâmetros do modelo é só rodar outra simulação.
 <code> <code>
-anima(tf=25,c=100,l=100,fi=.01,pi=0.2,pe=0.5)+simula2=metapop(tf=25,c=100,l=100,fi=.01,pi=0.2,pe=0.5
 +anima(simula2)
 </code> </code>
  
mod1/mat_apoio/meta_chuva.1281977742.txt.gz · Última modificação: 2024/01/11 15:21 (edição externa)
CC Attribution-Noncommercial-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0