Índice
- O Curso R
-
- Tutoriais
-
- Apostila
-
- 6. Testes de Hipótese (em preparação!)
- Exercícios
-
- Material de Apoio
-
- Área dos Alunos
-
- Cursos Anteriores
-
IBUSP
Outras Insitutições
Linques
Visitantes
Outras Insitutições
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 V
P
com t
NAsPi
na posição 1 do vetor P
T
de 1 até t
for
com contador i
de 2 até t
crescimento.v
= r*Vi
captura.v
= a
*Vi
*Pi
crescimento.p
= b
*Vi
*Pi
mortalidade.p
= q
*Pi
dV
= crescimento.v
– captura.v
dP
= crescimento.p
– mortalidade.p
V1
= Vi
+ dV
P1
= Pi
+ dP
Vi
= V1
Pi
= P1
V1
e P1
nos vetores V
e P
predador.presa
com os valores dos vetores t
, V
e P
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?
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é t
t
no vetor e
for
com contador j
de 1 até t
t
no vetor s
for
com contador k
de 1 até t
t
no vetor r
for
com contador p
de 1 até t
ACf
= (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