You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Precisamos recuperar, documentar e manter os testes básicos do TWoLife: crescimento exponencial simples, capacidade de suporte, comparação com o Skellam, etc.
Com o novo pull reuqest (#26) do D2 vi como este ToDo é importante! Antes de verificar se a modificação proposta pelo request funciona temos que usar uma bateria de testes que verifica se o que já fucniona continua.. Proposta de pacote básico:
Crescimento exponencial
Tamanho esperado da populacao após um certo tempo, independência do raio, independência dos parâmetros de movimentação
Crescimento logístico:
-Tamanho esperado da populacao após um certo tempo, independência do raio e da movimentação para capacidade de suporte global (campo médio), estabilização do tamanho populacional médio mesmo com capacidade de suporte local
Reação-difusão:
velocidade da frente de onda decrescente com difusão pura e constante com reação-difusão.
Existência de um tamanho mínimo de mundo para que a população não se extinga, sob crescimento exponencial (limiar de Skellam)
Acho que o lugar certo pra criar esses testes é no R mesmo. Ter um arquivo
que roda o TWoLife com parâmetros "padrãozão" e verifica se o resultado
bate.
Sugiro usar sempre "set.seed" antes de cada teste pra garantir
reprodutibilidade, e testar igualdade com "all.equal", que permite que as
comparações sejam feitas com uma certa tolerância (se não, fica difícil
comparar as coisas, pq 1 / 3 * 3 é diferente de 1, por conta do erro de
float).
Sem movimentação e denso-dependência global a população total deve crescer até uma capacidade de suporte.
O valor desta capacidade deve ser fácil de calcular a partir de raio, tamanho do munod, taxas basais e inclinações
Dividir a paisagem ao meio, com denso-depenência nas manchas de habitats e taxa líquida sempre negativa na matriz. Sem movimento isto deve resultar em matriz vazia depois de algum tempo. Novamente deve ser possível calcular a densidade esperada no habitat.
Pessoal, finalmente acabei de fazer algumas funções teste para o TWoLife, que está no novo arquivo Analytical-pckg.R. No arquivo Tests.R estão os testes que rodei para gerar os gráficos que apresento abaixo. Nesse processo, retirei (ainda está como comentário) os comandos de teste do arquivo TWoLife.R, que agora contém apenas as funções básicas para chamar o TWoLife em R. Por enquanto, só testei para paisagem homogênea, para as quais se aplicam as predições do modelo de Skellam. Antes de testar paisagem heterogênea, gostaria de discutir como calcular densidade nessa condição (abrirei um issue para isso).
Crescimento exponencial puro (50 réplicas)
Comentário : Parece estar tudo ok com essa parte. Para qualquer configuração inicial dos indivíduos (centro, aleatória uniforme, aleatória normal). Já havia testado varias outras vezes sem problemas.
Crescimento Logístico puro, densidade global (20 réplicas)
Congifuração inicial = Centro (0,0)
Configuração Inicial = Aleatória Uniforme
Comentário : Parece estar tudo ok com essa parte também.
Crescimento Logístico puro, densidade local (20 réplicas)
Comentário : Com crescimento logístico e denso-depêndencia local as primeiras estranhezas começam a aparecer. Por exemplo, extinção de populações com crescimento positivo. Isso tem a ver com a configuração inicial. Se todos começam no centro, a chance de extinção aumenta muito pois a capacidade suporte é alterada para o número de indivíduos que cabe na circunferência de percepção. Isso aumento os efeitos estocásticos.
Caminhada Aleatória pura (50 réplicas)
Velocidade
Desvio padrão da distribuição dos individuos ao longo do tempo
Comentário : Parece estar tudo ok com essa parte também.
Comentário : Parece estar tudo ok com essa parte. O desvio observado para configurações iniciais aleatórias pode ser esperado, uma vez que a predição do modelo de Skellam é feita para configuração inicial centralizada. No entanto, ao observarmos o ultimo conjunto de gráficos (tamanho mínimo da paisagem) observamos que, em todas as paisagens testadas, o tamanho populacional não atingiu o valor esperado (mesmo em paisagens com área suficiente para evitar extinção; P extinção = 0).
Acho que o motivo de ambos os desvios é o efeito de borda (condição de contorno), mas não tenho certeza. Parece que mesmo sustentando populações estáveis, o tamanho final da população dependerá da área da paisagem a longo prazo (i.e. quando tempo suficiente tenha sido dado para que os indivíduos cheguem às bordas da paisagem).
Reação-Difusão: Crescimento logístico, densidade global (20 réplicas)
Crescimento Populacional
Velocidade
Detalhe
Comentário : Percebe-se que a velocidade não só está abaixo do esperado como parece ser igual a zero. Isso me fez pensar se o método para calcular a velocidade no modelo de reação-difusão logístico deve ser mudado. Vocês tem alguma idéia do porque isso está ocorrendo?
Reação-Difusão: Crescimento logístico, densidade local (20 réplicas)
Crescimento Populacional
Congifuração inicial = Centro (0,0)
Congifuração Aleatória Uniforme
Velocidade
Congifuração inicial = Centro (0,0)
Congifuração Aleatória Uniforme
Detalhe (Configuração aleatória)
Comentário : Aqui o caso é bem mais complicado. Primeiro dá para ver que algumas combinações de parâmetros levam à extinção "inesperada" da população, como o Paulo já havia atentado.
Além disso, estou com dúvidas em como calcular o tamanho populacional esperado. Do jeito que fiz, é independente do raio de percepção do indivíduo. No entanto os resultados mostram o contrário. Da mesma forma, os parâmetros de inclinação de denso-dependência assim como as taxas basais afetam a dinâmica como mostra os casos 3 e 4 para ambas configurações iniciais testadas. Vejam que nos casos 4 a única mudança é o valor das taxas basais, porém mantém-se a taxa de crescimento populacional (b0 - d0).
Em relação à velocidade, os mesmos problemas permanecem. Não percebi diferença variando o raio de percepção dos indivíduos.
CONCLUSÃO
Acho que a simulação está funcionando corretamente, porém tem esses casos especiais que merecem ser discutidos. Acho que isso faz parte de um modelo de simulação, correto? Na verdade, a única questão que tenho é sobre o cálculo da velocidade para reação-difusão logística.
Se eu entendi corretamente, o processo é rodar o Tests.R e olhar pras figuras? (que devem ser as que o D2 colocou acima).
Já usei o Travis-CI e é muito bom, mas tem duas coisas que precisam ser adaptadas:
Pra automatizar isso precisa transformar essas comparações entre simulado e esperado em números, que batem ou não. Com um set.seed daria pra testar até valores específicos, mas acho que isso restringiria demais as alterações (se você acrescenta um sorteio ou muda a ordem de qualquer coisa, os resultados mudam). Então acho que precisa ser uma comparação estatística mesmo.
Eu pus pra rodar aqui, um i7 com 8 (pseudo-)cores, e demorou um monte, até cancelei ainda na Comb-07. Os testes precisam ficar (bem) mais curtos, deveria rodar tudo em ~1h (a verificar), se não vai estourar o tempo de execução do Travis. Alternativamente, dá pra deixar um serviço rodando no abacus que roda os testes a cada commit e manda um e-mail avisando, mas isso já vem depois do push, não antes (é possível fazer ele procurar os PRs, mas teria que investigar...)
Activity
piklprado commentedon Sep 25, 2014
Com o novo pull reuqest (#26) do D2 vi como este ToDo é importante! Antes de verificar se a modificação proposta pelo request funciona temos que usar uma bateria de testes que verifica se o que já fucniona continua.. Proposta de pacote básico:
-Tamanho esperado da populacao após um certo tempo, independência do raio e da movimentação para capacidade de suporte global (campo médio), estabilização do tamanho populacional médio mesmo com capacidade de suporte local
awade2 commentedon Sep 26, 2014
Ok vou fazer isso no R, ok? vou cirar um código de testes prontos para esses casos.
andrechalom commentedon Sep 26, 2014
Acho que o lugar certo pra criar esses testes é no R mesmo. Ter um arquivo
que roda o TWoLife com parâmetros "padrãozão" e verifica se o resultado
bate.
Sugiro usar sempre "set.seed" antes de cada teste pra garantir
reprodutibilidade, e testar igualdade com "all.equal", que permite que as
comparações sejam feitas com uma certa tolerância (se não, fica difícil
comparar as coisas, pq 1 / 3 * 3 é diferente de 1, por conta do erro de
float).
On Thu, Sep 25, 2014 at 10:03 PM, Marcelo Awade notifications@github.com
wrote:
piklprado commentedon Sep 28, 2014
Totalmente de acoRdo! Mais alguns testes simples:
awade2 commentedon Oct 9, 2014
Pessoal, finalmente acabei de fazer algumas funções teste para o TWoLife, que está no novo arquivo Analytical-pckg.R. No arquivo Tests.R estão os testes que rodei para gerar os gráficos que apresento abaixo. Nesse processo, retirei (ainda está como comentário) os comandos de teste do arquivo TWoLife.R, que agora contém apenas as funções básicas para chamar o TWoLife em R. Por enquanto, só testei para paisagem homogênea, para as quais se aplicam as predições do modelo de Skellam. Antes de testar paisagem heterogênea, gostaria de discutir como calcular densidade nessa condição (abrirei um issue para isso).
Acho que o motivo de ambos os desvios é o efeito de borda (condição de contorno), mas não tenho certeza. Parece que mesmo sustentando populações estáveis, o tamanho final da população dependerá da área da paisagem a longo prazo (i.e. quando tempo suficiente tenha sido dado para que os indivíduos cheguem às bordas da paisagem).
Além disso, estou com dúvidas em como calcular o tamanho populacional esperado. Do jeito que fiz, é independente do raio de percepção do indivíduo. No entanto os resultados mostram o contrário. Da mesma forma, os parâmetros de inclinação de denso-dependência assim como as taxas basais afetam a dinâmica como mostra os casos 3 e 4 para ambas configurações iniciais testadas. Vejam que nos casos 4 a única mudança é o valor das taxas basais, porém mantém-se a taxa de crescimento populacional (b0 - d0).
Em relação à velocidade, os mesmos problemas permanecem. Não percebi diferença variando o raio de percepção dos indivíduos.
CONCLUSÃO
Acho que a simulação está funcionando corretamente, porém tem esses casos especiais que merecem ser discutidos. Acho que isso faz parte de um modelo de simulação, correto? Na verdade, a única questão que tenho é sobre o cálculo da velocidade para reação-difusão logística.
awade2 commentedon Oct 9, 2014
Chalom, esqueci de colocar o set.seed... e não usei nada que demandasse a função all.equal. Não vejo onde ela se aplicaria em nossos testes.
Ah, e ainda não implementei no código um contador que não seja de um em um. Não estou conseguindo lembrar da formula para isso.
Merge pull request #26 from awade2/master
renatocoutinho commentedon Jun 2, 2016
Se eu entendi corretamente, o processo é rodar o Tests.R e olhar pras figuras? (que devem ser as que o D2 colocou acima).
Já usei o Travis-CI e é muito bom, mas tem duas coisas que precisam ser adaptadas: