Cursei minha graduação (Ciências Biológicas) e meu mestrado (Ecologia e Evolução) na UNIFESP - Diadema. Atualmente sou doutoranda no programa de Ecologia do IB-USP no Laboratório de Ecologia Evolutiva, sob orientação do Prof. Dr. Rodrigo Cogni.
Desde o mestrado estudo interações ecológicas e hoje trabalho com interações entre hospedeiro-simbionte-inimigo natural, usando o sistema Drosophila-Wolbachia-vírus como modelo para compreender questões coevolutivas.
O modelo clássico predador-presa de Lotka-Volterra, representado pelas equações abaixo, é bastante familiar para os estudantes de ecologia populacional. A ideia desta função é criar uma simulação a partir deste modelo e gerar um gráfico para observar o comportamento das populações de presas e de predadores ao longo do tempo, o que seria bem legal e didático para os alunos de graduação se familiarizarem com o modelo e com o R.
Modelo do crescimento populacional das presas:
Modelo do crescimento populacional dos predadores:
Planejamento da função
Entrada: predação (Vi, Pi, r, a, q, b, t, graph=T)
Vi: número inicial de indivíduos na população de vítimas (presas);
Pi: número inicial de indivíduos na população de predadores;
r: taxa intrínseca de crescimento da população de vítimas;
a: eficiência de captura (efeito de um predador sobre o crescimento populacional per capta da população de vítimas);
q: taxa de mortalidade per capta de predadores;
b: eficiência de conversão (capacidade dos predadores em converter cada vítima em um incremento no crescimento populacional per capita dos predadores);
t: tempo;
graph: default = TRUE, retorna o gráfico do número de presas e de predadores ao longo do tempo.
Também vamos utilizar as fórmulas citadas acima, mas vamos calcular cada termo separado para ficar mais didático:
Modelando o crescimento populacional de vítimas (dV):
crescimento.v = r*Vi (taxa de crescimento da população de vítimas)
captura.v = a*Vi*Pi (taxa de captura das vítimas)
Então, dV = crescimento.v – captura.v
Modelando o crescimento populacional de predadores (dP):
crescimento.p = b*Vi*Pi (taxa de crescimento da população de predadores)
mortalidade.p = q*Pi (taxa de mortalidade dos predadores)
Então, dP = crescimento.p - mortalidade.p
Premissas da função:
Vi, Pi e t devem ter valores >= 1.Pseudo-código:
Vi, Pi, r, a, b, q, t definidos pelo usuárioV com t NAsVi na posição 1 do vetor VP com t NAsPi na posição 1 do vetor PT de 1 até tfor com contador i de 2 até tcrescimento.v = r*Vicaptura.v = a*Vi*Picrescimento.p = b*Vi*Pimortalidade.p = q*PidV = crescimento.v – captura.vdP = crescimento.p – mortalidade.p V1 = Vi + dVP1 = Pi + dPVi = V1Pi = P1V1 e P1 nos vetores V e Ppredador.presa com os valores dos vetores t, V e PP em função de t e V em função de t
Saída: A função retorna o data.frame predador.presa e o gráfico da interação predador-presa ao longo do tempo.
Referência: GOTELLI, Nicolas J. 2009. Ecologia. Quarta edição, Londrina, Ed. Planta.
— Renan Del Bel 2019/06/13 12:48
Muito interessante a função, mas talvez seja muito simples.
Talvez valha a pena permitir escolher se o gráfico será predador e presa x tempo ou predador x presa.
Será que não é possível permitir uma mudança nas taxas vitais ao longo do tempo? Seria possível trabalhar com mais que duas populações interagindo?
A ideia desta função é definir se é possível acumular uma certa quantidade de dinheiro em um tempo determinado pelo usuário, utilizando como base valores de entrada, saída e rendimento em um balanço financeiro. Por exemplo, se eu quiser juntar R$5.000,00 em 12 meses, definindo meus valores de entrada (salário), saída (gastos) e rendimento (% rendimento bancário), a função calcula se o acúmulo será suficiente para atingir a meta, e caso não seja, irá calcular a economia média mensal necessária para conseguir atingi-la.
Planejamento da função
Entrada: poupando(AC, t)
Para chegar ao nosso objetivo, precisamos gerar vetores de tamanho variável t: e, s e r
Também usaremos a seguinte fórmula: ACf = (AC+(e-s))*(1+r)
Onde,
AC = valor que deseja acumular;
t = número de meses que quer levar para chegar ao valor acumulado;
e = valor da entrada de dinheiro (salário);
s = valor da saída de dinheiro (gastos);
r = valor do rendimento bancário mensal (%);
ACf = valor acumulado final no período t.
Premissas da função:
t deve ter valor >= 1;e e s devem ter valor >=0;r deve ter um valor entre 0 e 1.
Pseudo-código:
AC e t desejadose com t NAss com t NAsr com t NAsfor com contador i de 1 até tt no vetor efor com contador j de 1 até tt no vetor sfor com contador k de 1 até tt no vetor rfor com contador p de 1 até tACf = (AC+(e-s))*(1+r)AC = ACf (AC recebe o valor de ACf para função ser cumulativa)AC for maior que ACf, calcula (AC - ACf)/t
Saída: A função retorna se é possível acumular o valor desejado, se não for, ela retorna o valor médio da economia que deve ser feita por mês para chegar ao valor desejado no tempo t.
— Renan Del Bel 2019/06/13 12:53
Pedir que o usuário insira valores a cada passo da função não é interessante. Ao invés disso permita que a função receba um vetor com a entrada de dinheiro de cada mês (e se receber um valor menor que 't' o vetor só se repete até dar o tamanho). O mesmo se aplica para a saída de dinheiro e rendimento bancário (eu trocaria o nome apenas para rendimento).
Uma entrada que senti falta é a quantidade inicial de dinheiro. Da forma como está escrito o pseudo-código, você está usando AC como seu valor inicial ao invés de meta.
Seria também interessante plotar um gráfico com a quantidade de dinheiro acumulada x tempo.
O passo 9 não parece funcionar bem: você esteve mudando o valor de AC durante a função, então 'AC' sempre será igual a 'ACf'. Além disso, uma divisão simples não captura bem como taxas se comportam. O melhor seria continuar rodando a função até atingir o valor desejado.
Uma coisa que deve estar na descrição da função é que o resultado final é apenas uma estimativa da realidade. (Isso por que na vida real gastos ocorrem de forma contínua, nem todo seu dinheiro está rendendo e bancos podem calcular taxas de formas diferente, e nem sempre o rendimento é aplicado logo antes da entrada de seu próximo salário).
— Renan Del Bel 2019/06/13 12:53
Ambas as funções são viáveis. Observe as sugestões e coloque aqui na página qual delas você prefere seguir.
— Cássia 2019/06/14 22:59
Olá, Renan. Obrigada pelas dicas e sugestões! Pretendo seguir com a proposta A.
— Renan Del Bel 2019/06/17 12:53
Olá! Como disse antes, a proposta é interessante, mas me preocupa que ela seja simples. Das sugestões que eu dei (dar outra opção de output gráfico, permitir taxas que mudam com o tempo e trabalhar com mais populações) preciso que você me diga qual/quais você pretende seguir (você também pode ter outra ideia que ache mais interessante).
Preciso disso explícito para poder dar um OK definitivo.
— Cássia 2019/06/18 10:52
Oi, Renan! Gostei das suas dicas, pretendo dar a opção de trabalhar com mais populações e retornar os dois tipos de gráfico.
Oi Cassia,
Acho que a proposta A está boa, pode tocar com as inclusões que descreve acima. O gráfico de espaço de fase, sugerido pelo Renan, revela informações importantes sobre o sistema, acho que é uma ótima opção de saída gráfica. Bom trabalho
Como produto final, segui com a proposta A, incorporando as modificações sugeridas. Fiz uma função com dois modelos para o usuário escolher qual usar: o primeiro simula a interação entre uma presa e um predador e o segundo modelo simula a interação entre duas presas e um predador. Ambos modelos retornam o data.frame proposto, o gráfico da interação predador-presa ao longo do tempo e o gráfico de plano de fase.
Link para o código da função: Predação
Link para a página de ajuda da função: Help