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 19:40] paulomod1:mat_apoio:meta_chuva [2024/01/11 15:21] (atual) – edição externa 127.0.0.1
Linha 2: Linha 2:
 {{mod1:mat_apoio: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, a variação da fração de manchas ocupadas no tempo é descrito pela seguinte fórmula geral:+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, a 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>, onde I é a taxa de entrada de migrantes, 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:+</m>, onde I é a taxa de entrada de migrantes, 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]=matrix(sample(c(1,0),c*l,prob=c(fi,1-fi), replace=T),l,c)+        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 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.))   * 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.))
Linha 171: Linha 187:
   * E quando elas são muito baixas?   * E quando elas são muito baixas?
      
 +== DICA ==
  
 +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 178: 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)) 
- paisag[,,1]=matrix(sample(c(1,0),c*l,prob=c(fi,1-fi), replace=T),l,c) 
- resultado=numeric() 
- 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)]==0]<-sample(c(0,1),c*l-sum(paisag[,,1]),replace=T,prob=c(1-pi,pi)) 
-        resultado[t-1]=sum(paisag[,,t])/(c*l) 
-       } 
- return(paisag) 
- } 
  
-anima=function(tf,c,l,fi,pi,pe){ +anima=function(dados){ 
- dados=metapop2(tf,c,l,fi,pi,pe+        x11() 
- for(i in 1:tf){ + for(i in 1:dim(dados)[3]) 
- image(dados[,,i], main=("Ocupação de manchas"),col=c("white","red"),bty="n",xaxt='n',yaxt='n'+        
- grid(c,l+ image(dados[,,i], main=("Ocupação de manchas"),sub=paste("simulação no.= ", i), col=c("white","red"), bty="n",xaxt='n',yaxt='n'
- Sys.sleep(.5) + grid(dim(dados)[1],dim(dados)[2]
- }+ Sys.sleep(.2)
  }  }
 +}
 +
 +
 +simula1<- metapop(20,10,10,1.0, 0.4,0.2)
 +anima(simula1)
 +
  
-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.1281987623.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