Aqui você vê as diferenças entre duas revisões dessa página.
Próxima revisão | Revisão anterior | ||
roteiro:meta_chuva [2012/05/28 12:14] – criada adalardo | roteiro:meta_chuva [2024/01/09 18:18] (atual) – edição externa 127.0.0.1 | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
====== Chuva de Propágulos ====== | ====== Chuva de Propágulos ====== | ||
- | {{:ecovirt: | + | {{:roteiro: |
- | Neste exercício, iremos simular a dinâmica de uma metapopulação onde as probabilidades de extinção e de colonização de manchas | + | Neste exercício, 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, |
- | $$(df)/(dt) = I - E $$ | + | $$\frac{df}{dt}=I - E $$ |
- | , 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: | + | 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: |
- | $$(df)/(dt) = p_i(1 - f)- p_e f $$ | + | $$\frac{df}{dt}=p_i(1 - f)-p_e f $$ |
- | onde $$p_i$$ é a probabilidade | + | onde $p_i$ é a taxa de imigração ou colonização, |
+ | 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. | ||
+ | < | ||
+ | pi=0.3 | ||
+ | pe=0.15 | ||
+ | fi=0.4 | ||
+ | </ | ||
- | Vamos imaginar agora um cenário de uma paisagem virtual | + | Agora que já temos os parâmetros do nosso modelo (pi, pe e fi) vamos criar nossa paisagem virtual. Essa paisagem deve ser constituída por manchas de habitat que podem estar ocupadas |
+ | < | ||
+ | paisag=array(0,dim=c(10,10,1)) | ||
+ | paisag | ||
+ | </ | ||
- | <box green 70% | Nossa pegunta> | + | Muito bem, mas temos somente |
- | Bom, até aqui sabemos que nossa paisagem tem uma certa capacidade em acomodar | + | < |
- | Nosso pergunta | + | paisag=array(0,dim=c(10, |
- | </box> | + | paisag |
+ | </code> | ||
+ | Ótimo! Agora temos nossa paisagem em 10 tempos diferentes. | ||
- | ===== Fazendo as iterações ===== | + | Finalmente, antes de começarmos a brincadeira, |
+ | < | ||
+ | fi | ||
+ | 1-fi | ||
+ | rep(1, fi*100) | ||
+ | ocor< | ||
+ | nocor< | ||
+ | nocor | ||
+ | c(ocor, | ||
+ | sample(c(ocor, | ||
+ | paisag[,, | ||
+ | paisag[,, | ||
+ | image(paisag[,, | ||
+ | </ | ||
+ | Agora sim, estamos prontos para a simulação. | ||
- | A brincadeira aqui é como se tivessemos um tabuleiro com 400 casas, representando nossa paisagem, com 100 delas ocupadas | + | O passo seguinte é fazer as coisas acontecerem! Mas para isso temos que ter em mente todas as possibilidades: |
- | + | * **Manchas ocupadas** | |
- | Agora só precisamos fazer isso muitas vezes e observar a cada tempo quais casas foram colonizadas, | + | * podem permanecer |
+ | * podem sofrer extinção local (pe = 0,15) | ||
+ | * **Manchas vazias** | ||
+ | * podem permanecer vazias | ||
+ | * podem ser colonizadas | ||
+ | Calma, não se assuste. O monstrinho abaixo vai tratar apenas das manchas que estavam ocupadas no tempo inicial. | ||
+ | < | ||
+ | sum(paisag[,, | ||
+ | paisag[,, | ||
+ | paisag[,,2] | ||
+ | </ | ||
+ | Se você observar atentamente, | ||
- | ===== Usando | + | < |
+ | par(mfrow=c(1,2)) | ||
+ | image(paisag[,, | ||
+ | image(paisag[,, | ||
+ | </ | ||
+ | Estes foram eventos de extinção local. Note que o número de manchas ocupadas diminuiu. | ||
+ | < | ||
+ | sum(paisag[,, | ||
+ | sum(paisag[,, | ||
+ | </ | ||
- | Como fazer isso com um tabuleiro de 400 casas tomaria muito tempo, além de ser muito tedioso, vamos usar o **// | + | Mas essa é apenas metade da história, não? Estamos esquecendo que as manchas vazias podem ser ocupadas. Vamos simular a colonização |
+ | < | ||
+ | length(paisag[,,1]) ## esse é o tamanho da nossa paisagem ou o número | ||
+ | nmanchas=length(paisag[,,1]) ## vamos guardar esse valor que não muda durante toda a simulação | ||
+ | paisag[,, | ||
+ | paisag[,, | ||
+ | </code> | ||
- | Para tanto é necessário: | + | Compare a paisagem no tempo inicial e no tempo 2 e veja se no final o número |
+ | < | ||
+ | paisag[,,1] | ||
+ | paisag[,,2] | ||
- | Caso tenha seguido as instruções da página | + | sum(paisag[,, |
+ | sum(paisag[,,2]) # total de manchas ocupadas no tempo 2 | ||
+ | </code> | ||
+ | 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 | ||
+ | < | ||
+ | nmanchas | ||
+ | f1=sum(paisag[,, | ||
+ | f2=sum(paisag[,, | ||
- | {{:ecovirt:prorain1.png? | + | f1 |
- | + | f2 | |
+ | f2-f1 | ||
+ | </ | ||
+ | Eis a dinâmica de metapopulações! ;-) Mas até aqui vimos apenas a variação do f do tempo 1 para o tempo 2. Restam ainda 8 passos para chegarmos no tempo 10, só que para não termos que repetir todo o trabalho 8 vezes usaremos um comando chamado **for**, que fará o serviço por nós: | ||
+ | < | ||
+ | paisag=array(0, | ||
+ | nmanchas=length(paisag[,, | ||
+ | paisag[,, | ||
+ | resultado=numeric() | ||
+ | for(t in 2:10) | ||
+ | { | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | resultado | ||
+ | </ | ||
+ | Vôa lá! Agora temos as frações de manchas ocupadas (f) ao longo do tempo. Só para deixar nossos resultados mais bonitos, vamos colocá-los em uma tabela: | ||
+ | < | ||
+ | resultado=data.frame(t=1: | ||
+ | resultado | ||
+ | </ | ||
- | <box 70%|Opções do Menu Chuva de Propágulos> | + | Agora, |
- | * Enter name for data set -> nome para o salvar a simulação | + | <code> |
- | * Maximum time -> número de interações | + | par(mfrow=c(1, |
- | * Coluns -> número de colunas de habitat na nossa paisagem | + | plot(1: |
- | * Rows -> número de linhas na nossa paisagem | + | ylim=c(0, |
- | * Initial occupance -> fração | + | </code> |
- | * Colonization probability | + | |
- | * Extintion Probability -> probabilidade | + | |
- | </box> | + | |
- | Produza simulações com as seguintes situações iniciais: | + | Como nossa filosofia de vida é (ou pelo menos deveria ser) melhorar sempre, vamos acrescentar a esse gráfico uma informação muito importante: a fração de manchas ocupadas no equilíbrio |
- | * 1. $$ t_(max)=100, n_(col)=20, n_col=20,f = 0.2, p_i =0.5, p_e=0.2 $$ | + | |
- | * 2. $$ t_(max)=100, | + | |
- | * 3. $$ t_(max)=100, | + | |
- | * 4. $$ t_(max)=100, | + | |
- | * 5. $$ t_(max)=100, | + | |
- | * 6. $$ t_(max)=100, | + | |
- | * 7. $$ t_(max)=100, | + | |
- | * 8. $$ t_(max)=100, | + | |
- | * 9. $$ t_(max)=100, | + | |
- | * 10.$$ t_(max)=100, | + | |
- | * 11.$$ t_(max)=100, | + | |
+ | $$F=\frac{p_i}{p_i+p_e}$$ | ||
+ | Portanto... | ||
+ | < | ||
+ | F=pi/ | ||
+ | F | ||
+ | </ | ||
+ | Agora que conhecemos o F vamos colocá-lo no gráfico na forma de uma linha horizontal: | ||
+ | < | ||
+ | plot(1: | ||
+ | ylim=c(0, | ||
+ | abline(h=F, | ||
+ | </ | ||
- | ===== Outras Perguntas | + | O serviço sujo está feito, agora é hora da diversão! Como somos bonzinhos, resolvemos criar uma função para facilitar a vida de vocês. Com essa função vocês poderão variar os parâmetros do nosso modelo à vontade, sem medo de ser feliz. Por favor, retribuam a gentileza e testem vários valores para cada parâmetro e vejam o que acontece com nossas metapopulações virtuais. Abaixo a função: |
+ | < | ||
+ | metapop=function(tf, | ||
+ | paisag=array(0,dim=c(l, | ||
+ | nmanchas=c*l | ||
+ | paisag[,, | ||
+ | resultado=numeric() | ||
+ | for(t in 2:tf){ | ||
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | F=pi/ | ||
+ | |||
+ | plot(1: | ||
+ | ylim=c(0, | ||
+ | abline(h=F, | ||
+ | |||
+ | return(paisag) | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 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: | ||
+ | < | ||
+ | metapop(tf=100, | ||
+ | </ | ||
+ | <box 50%|Parâmetros da função metapop> | ||
+ | * tf - número total de passos no tempo | ||
+ | * c - número de colunas da matriz //paisag// | ||
+ | * l - número de linhas da matriz //paisag// | ||
+ | * fi - fração de manchas ocupadas inicial | ||
+ | * pi - probabilidade de colonização | ||
+ | * pe - probabilidade de extinção | ||
+ | </ | ||
+ | |||
+ | <box 80% red |Exercício> | ||
Agora é com vocês! Tentem responder às seguintes perguntas: | Agora é com vocês! Tentem responder às seguintes perguntas: | ||
- | * Quando | + | * O que acontece |
* O que acontece com a variação na fração de manchas ocupadas quando: | * O que acontece com a variação na fração de manchas ocupadas quando: | ||
* o número de manchas é muito grande? E quando é muito pequeno? | * o número de manchas é muito grande? E quando é muito pequeno? | ||
Linha 77: | Linha 193: | ||
* 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)? | ||
* Quais condições levam à extinção da população na paisagem neste modelo? | * Quais condições levam à extinção da população na paisagem neste modelo? | ||
- | | + | |
- | + | </ | |
- | ==== DICA ==== | + | == DICA == |
+ | |||
+ | Para responder às perguntas acima você precisa comparar resultados de diferentes simulações. | ||
+ | |||
+ | < | ||
+ | par(mfrow=c(2,2)) | ||
+ | </ | ||
+ | |||
+ | 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: | ||
+ | |||
+ | < | ||
+ | par(mfrow=c(1,1)) | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Para vocês que chegaram vivos até aqui, uma recompensa. Rode os comandos abaixo e descubra: | ||
+ | < | ||
+ | |||
+ | anima=function(dados){ | ||
+ | x11() | ||
+ | for(i in 1: | ||
+ | { | ||
+ | image(dados[,, | ||
+ | grid(dim(dados)[1], | ||
+ | Sys.sleep(.2) | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | simula1< | ||
+ | anima(simula1) | ||
- | *1. Para responder às perguntas acima você precisa comparar resultados de diferentes simulações. | + | </ |
- | *2. Note que no final são apresentados dois gráficos, um mostrando o cenário da paisagem em quatro tempos e outro com a variação da proporção das manchas ao longo do tempo. Um pode esconder o outro, portanto movimente as janelas para poder visualizar todos | + | |
- | *3. As janelas gráficas não são fechadas entre as simulações. De tempos em tempos, salve aquelas que interessam e feche as outras. | + | |
- | *4. Caso tenha algum conhecimento rudimentar da linguagem R e queira conhecer os códigos das funções, veja o roteiro a [[ecovirt: | + | |
+ | Para fazer rodar a animação você precisa apenas salvar o resultado da função // | ||
+ | < | ||
+ | simula2=metapop(tf=25, | ||
+ | anima(simula2) | ||
+ | </ |