Cássia Siqueira Cesar
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.
Exercícios
Trabalho final
Proposta A – Simulando a interação predador-presa
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:
- Todos os parâmetros devem ser numéricos;
Vi,Pietdevem ter valores >= 1.
Pseudo-código:
- Entrada dos valores de
Vi,Pi,r,a,b,q,tdefinidos pelo usuário
- Criação do vetor
VcomtNAs
- Adiciona valor de
Vina posição 1 do vetorV
- Criação do vetor
PcomtNAs
- Adiciona valor de
Pina posição 1 do vetorP
- Criação do vetor
Tde 1 atét
- Criação de um loop
forcom contadoride 2 atét
- Calcula
crescimento.v=r*Vi
- Calcula
captura.v=a*Vi*Pi
- Calcula
crescimento.p=b*Vi*Pi
- Calcula
mortalidade.p=q*Pi
- Calcula
dV=crescimento.v–captura.v
- Calcula
dP=crescimento.p–mortalidade.p
- Calcula
V1=Vi+dV
- Calcula
P1=Pi+dP
- Atualiza o valor
Vi=V1
- Atualiza o valor
Pi=P1
- Adiciona valores de
V1eP1nos vetoresVeP
- Fecha o loop
- Criação de um data.frame
predador.presacom os valores dos vetorest,VeP
- Faz o plot de
Pem função deteVem função det
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?
Proposta B – Poupando
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:
- Todos os parâmetros devem ser numéricos;
tdeve ter valor >= 1;
eesdevem ter valor >=0;
rdeve ter um valor entre 0 e 1.
Pseudo-código:
- Entrada dos valores de
ACetdesejados
- Criação do vetor
ecomtNAs
- Criação do vetor
scomtNAs
- Criação do vetor
rcomtNAs
- Criação de um loop
forcom contadoride 1 atét
- Usuário deve inserir os valores de entrada de dinheiro a cada mês do tempo
tno vetore
- Fecha o loop
- Criação de um loop
forcom contadorjde 1 atét
- Usuário deve inserir os valores de saída de dinheiro a cada mês do tempo
tno vetors
- Fecha o loop
- Criação de um loop
forcom contadorkde 1 atét
- Usuário deve inserir os valores de rendimento bancário a cada mês do tempo
tno vetorr
- Fecha o loop
- Criação de um loop
forcom contadorpde 1 atét
- Calcula
ACf= (AC+(e-s))*(1+r)
- Atualiza o valor
AC=ACf(ACrecebe o valor deACfpara função ser cumulativa)
- Fecha o loop
- Se
ACfor maior queACf, 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
Links para o trabalho final
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


