Traduções desta página:

Ferramentas do usuário

Ferramentas do site


05_curso_antigo:r2019:alunos:trabalho_final:cassiasqr:start

Cássia Siqueira Cesar

img-5176.jpg

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:

vitimas.png

Modelo do crescimento populacional dos predadores:

predadores.png

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.vcaptura.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:

  1. Todos os parâmetros devem ser numéricos;
  2. Vi, Pi e t devem ter valores >= 1.

Pseudo-código:

  1. Entrada dos valores de Vi, Pi, r, a, b, q, t definidos pelo usuário
  2. Criação do vetor V com t NAs
  3. Adiciona valor de Vi na posição 1 do vetor V
  4. Criação do vetor P com t NAs
  5. Adiciona valor de Pi na posição 1 do vetor P
  6. Criação do vetor T de 1 até t
  7. Criação de um loop for com contador i de 2 até t
    1. Calcula crescimento.v = r*Vi
    2. Calcula captura.v = a*Vi*Pi
    3. Calcula crescimento.p = b*Vi*Pi
    4. Calcula mortalidade.p = q*Pi
    5. Calcula dV = crescimento.vcaptura.v
    6. Calcula dP = crescimento.pmortalidade.p
    7. Calcula V1 = Vi + dV
    8. Calcula P1 = Pi + dP
    9. Atualiza o valor Vi = V1
    10. Atualiza o valor Pi = P1
    11. Adiciona valores de V1 e P1 nos vetores V e P
    12. Fecha o loop
  8. Criação de um data.frame predador.presa com os valores dos vetores t, V e P
  9. Faz o plot de P 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?

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:

  1. Todos os parâmetros devem ser numéricos;
  2. t deve ter valor >= 1;
  3. e e s devem ter valor >=0;
  4. r deve ter um valor entre 0 e 1.

Pseudo-código:

  1. Entrada dos valores de AC e t desejados
  2. Criação do vetor e com t NAs
  3. Criação do vetor s com t NAs
  4. Criação do vetor r com t NAs
  5. Criação de um loop for com contador i de 1 até t
    1. Usuário deve inserir os valores de entrada de dinheiro a cada mês do tempo t no vetor e
    2. Fecha o loop
  6. Criação de um loop for com contador j de 1 até t
    1. Usuário deve inserir os valores de saída de dinheiro a cada mês do tempo t no vetor s
    2. Fecha o loop
  7. Criação de um loop for com contador k de 1 até t
    1. Usuário deve inserir os valores de rendimento bancário a cada mês do tempo t no vetor r
    2. Fecha o loop
  8. Criação de um loop for com contador p de 1 até t
    1. Calcula ACf = (AC+(e-s))*(1+r)
    2. Atualiza o valor AC = ACf (AC recebe o valor de ACf para função ser cumulativa)
    3. Fecha o loop
  9. Se 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

05_curso_antigo/r2019/alunos/trabalho_final/cassiasqr/start.txt · Última modificação: 2020/08/12 06:04 (edição externa)