Equilíbrio e estabilidade são conceitos muito importantes em ecologia, mas que comportam muitas definições. Uma das definições mais usadas foi trazida do ramo da física e da matemática chamada de análise de sistemas dinâmicos.
É esta abordagem que trouxe para a ecologia equações para descrever a dinâmica de populações, como a equação logística e o sistema de equações de Lotka-Volterra.
Há técnicas para avaliar se estes sistemas de equações têm pontos de equilíbrio, e se este equilíbrio é estável. Robert May (1972) usou estas ferramentas para demonstrar algo surpreendente: a estabilidade em redes tróficas diminui com o aumento de espécies e de complexidade.
Este exercício é uma repetição simplificada do procedimento usado por Robert May. O objetivo é que você compreenda os conceitos de equilíbrio e estabilidade usadas em sistemas dinâmicos, para diferenciá-los de outras definições de equilíbrio e estabilidade usadas na ecologia. Com isso você terá também os elementos para avaliar criticamente os resultados da análise de May (1972).
Para fazer esse roteiro pressupõe que você deve conhecer os critérios para análise de pontos de equilíbrio e sua estabilidade em modelos de uma população.
Se isso não é familiar a você, faça primeiro o roteiro de introdução à análise de estabilidade em sistemas dinâmicos.
Este exercício é feito em R (R Core Team 2012), mas você não precisa conhecer a linguagem R, porque damos os comandos já prontos para executar. Eles estão reproduzidos nesta página, e também em um arquivo, abaixo. A única coisa que você precisa saber é como enviar os comandos escritos neste arquivo para o R. Para isso você pode copiar os comandos desta página e colar na linha de comando do R. Mas é bem mais prático usar o arquivo de comandos, ou script. Para isso, siga os seguintes passos:
deSolve
e rootSolve
. A página do R tem instruções de instalação. Veja também nosso roteiro de instalação do R.eq_lv_comandos.r
. Certifique-se de que você está no diretório onde estão os arquivos.library(deSolve) library(rootSolve) source("eq_funcoes.r")
No roteiro de análise de estabilidade vimos o critério de estabilidade local em sistemas dinâmicos
Um ponto de equilíbrio de uma dinâmica populacional é estável se a derivada da velocidade de crescimento da população for negativa nesse ponto.
O primeiro passo para compreender os resultados de Robert May é generalizar esse critério para mais de uma população que interagem.
Para entender isso vamos usar o sistema de equações de competição de Lotka-Volterra:
$V_1 \ = \ r_1 N_1 \left( 1 - \frac{N_1 - \alpha N_2}{K_1} \right)$
$V_2 \ = \ r_2 N_2 \left( 1 - \frac{N_2 - \beta N_1}{K_2} \right)$
Onde para as espécies 1 e 2:
Use a função plota.LV
para plotar as abundâncias de duas espécies competidoras que coexistem. Os argumentos correspondem aos parâmetros acima, mais as condições iniciais:
n
: vetor com tamanho inicial das populações da espécie 1 e 2r1
e r2
: taxas intrínsecas de crescimentoK1
e K2
: capacidades de suportealfa
e beta
: coeficientes de competiçãotime
: tempo máximoVerifique a função com este comando:
plota.LV(n=c(n1=1,n2=1),r1=0.2,K1=150,r2=0.2,K2=100, alfa=0.2,beta=0.1,time=150)
Neste sistema de equações os tamanhos populacionais em equilíbrio são (Gotelli 2007):
$N^*_1 = \frac{K_1-\alpha K_2}{1-\alpha \beta}$
$N^*_2 = \frac{K_2-\beta K_1}{1-\alpha \beta}$
A função lv.neq
calcula estes valores. Use-a para obter os tamanhos em equilíbrio usados no comando anterior que produziu o gráfico, e compare com o gráfico:
(lv.n1 <- lv.neq(r1=0.2,K1=150,r2=0.2,K2=100,alfa=0.2,beta=0.1))
Há duas condições para a coexistência de competidores no sistema de Lotka-Volterra com duas espécies:
$\frac{1}{\beta} \ > \ \frac{K_1}{K_2} \ > \ \alpha$
$\frac{1}{\beta} \ < \ \frac{K_1}{K_2} \ < \ \alpha$
Vamos verificar a estabilidade dos tamanhos populacionais em equilíbrio sob estas duas condições. A função plota.LV
também tem um argumento para aumentar ou reduzir a população a qualquer momento.
Já calculamos os tamanhos no equilíbrio para um caso da primeira condição, que guardamos no objeto lv.n1
. Para fazer o gráfico basta indicar este objeto no argumento n
da função. No argumento perturb
coloque os valores a adicionar ou subtrair de cada população.
Execute o comando abaixo para subtrair um indivíduo da população 1 e acrescentar um indivíduo à população 2:
## Perturbando no equilibrio ## Grafico ## plota.LV(n=lv.n1,r1=0.2,K1=150,r2=0.2,K2=100,alfa=0.2,beta=0.1,time=150, perturb=c(-1,1), t.perturb=50)
Faça o mesmo para uma combinação de parâmetros que satisfaça a segunda condição:
## Coexistência das duas espécies, 1/beta > k1/k2 > alfa ## ## Calculo dos valores no equilibrio (lv.n2 <- lv.neq(r1=0.2,K1=150,r2=0.2,K2=100,alfa=1.8,beta=0.9)) ## Grafico ## plota.LV(n=lv.n2,r1=0.2,K1=150,r2=0.2,K2=100,alfa=1.8,beta=0.9,time=150) ## Perturbando no equilibrio ## plota.LV(n=lv.n2,r1=0.2,K1=150,r2=0.2,K2=100,alfa=1.8,beta=0.9,time=200, perturb=c(-1,1), t.perturb=50)
O que acontece se você inverte a perturbação?
## Invertendo a perturbação ## plota.LV(n=lv.n2,r1=0.2,K1=150,r2=0.2,K2=100,alfa=1.8,beta=0.9,time=200, perturb=c(1,-1), t.perturb=50)
A lógica da análise matemática da estabilidade local deste sistema é a mesma da aplicada para uma população. Um ponto será localmente estável se na sua vizinhança a velocidade (variação do tamanho populacional) tiver uma relação negativa com os tamanhos populacionais. Só que agora temos duas equações, e em cada uma as velocidades dependem dos tamanhos populacionais das duas espécies.
Uma maneira de resolver o problema é avaliar o efeito de cada população sobre cada velocidade, mantida a outra população fixa. Isto é feito com derivadas parciais, designadas com o símbolo $\partial$.
Por exemplo,
$\frac{\partial V_1}{\partial N_1}$
é a derivada da velocidade de crescimento da população 1 em relação ao tamanho da população 1, mantida a população 2 fixa. Esta derivada expressa o efeito que uma espécie tem sobre seu próprio crescimento populacional. O efeito da espécie 1 sobre o crescimento da espécie 2 é
$\frac{\partial V_2}{\partial N_1}$
O próximo truque é organizar as derivadas parciais em uma matriz, que podemos ler como a combinação dos efeitos parciais de cada espécie sobre si mesma e sobre a competidora:
$\left( \begin{matrix} \frac{\partial V_1}{\partial N_1} & \frac{\partial V_1}{\partial N_2} \\ & \\\frac{\partial V_2}{\partial N_1} & \frac{\partial V_2}{\partial N_2} \end{matrix} \right) $
Esta é a Matriz Jacobiana do sistema de equações. A diagonal desta matriz tem os efeitos das populações de cada espécie sobre si mesmas. Fora das diagonais temos os efeitos inter-específicos.
No estudo de estabilidade local da equação logística avaliamos o sinal da derivada nos pontos de equilíbrio. Aqui fazemos o mesmo para cada derivada parcial. Com isso teremos a matriz das derivadas parciais avaliadas num dado ponto de equilíbrio. A esta Jacobiana do sistema Lotka-Volterra, avaliada nos pontos de equilíbrio, May (1972) chamou de Matriz da comunidade:
Para uma equação a aproximação linear indica que o equilíbrio é estável se a relação entre velocidades e tamanhos populacionais na sua vizinhança é negativa. Mas como avaliar isto agora? A extensão do critério de estabilidade local por aproximação linear para um sistema de equações Lotka-Volterra é o seguinte:
Para um sistema de equações de Lotka-Volterra, um ponto de equilíbrio é localmente estável se todos os autovalores da matriz da comunidade forem negativos.
Autovalores são propriedades de matrizes, e uma das bases da álgebra linear. Para uma introdução didática veja Otto & Day (2007, caps 7 e 8).
Para nossos propósitos, basta a noção de que autovalores negativos são o equivalente multivariado da derivada negativa para uma equação diferencial.
O número de autovalores de uma matriz de comunidades é igual ao número de espécies. O cálculo de autovalores não é simples, mas temos a ajuda do R, com sua função eigen.
Vamos calcular a matriz de comunidades para a primeira combinação de parâmetros que experimentamos. Para isso usamos a função jacob.lv
, informando os valores dos parâmetros. A função já calcula os tamanhos populacionais no equilíbrio e a matriz Jacobiana avaliada nestes pontos:
##Primeira combinação de parametros: 1/beta < k1/k2 < alfa ## ## Matriz da comunidade j1 <- jacob.lv(r1=0.2,K1=150,r2=0.2,K2=100,alfa=0.2,beta=0.1)
Agora aplicamos a função eigen
para obter os autovalores desta matriz:
##Autovalores eigen(j1, only.values=TRUE)$values
Faça o mesmo com a segunda combinação de parâmetros que experimentamos:
## Segunda combinação de parametros: 1/beta > k1/k2 > alfa ## ## Matriz da comunidade j2 <- jacob.lv(r1=0.2,K1=150,r2=0.2,K2=100,alfa=1.8,beta=0.9) ##Autovalores eigen(j2, only.values=TRUE)$values
Pergunta: Os resultados desta análise são coerentes com o que você observou ao perturbar o sistema?
A matriz de comunidade pode ser estendida para quantas espécies desejarmos. Robert May usou isso para avaliar se diversidade de espécies aumenta a estabilidade. Se isto for verdade, como era aceito à época, deve ser mais fácil montar matrizes estáveis que sejam grandes, do que pequenas.
Para testar esta hipótese, May fez a seguinte simulação:
Com isso, geramos um sistema em que há competição intra-específica igual para todas as espécies, e uma proporção fixa de associações inter-específicas, distribuídas ao acaso. O valor e sinal destas interações também é sorteado. May sorteou os efeitos inter-específicos de uma distribuição normal com média zero. Com isso interações positivas e negativas são igualmente prováveis. Outro parâmetro importante da simulação é o desvio-padrão desta distribuição normal, que aumenta o valor médio do efeito das interações. Por isso, ele é chamado de força de interação.
A função may
reproduz a simulação, e tem os argumentos:
S
: número de espéciesC
: conectânciaf
: força média das interaçõesnsim
: número de repetições da simulaçãoA função retorna a proporção das repetições que produziram sistemas estáveis 1).
Vamos começar com 20 espécies, conectância de 0,3 2) e força de interação de 0,2:
(sim.1 <- may(S=20,C=0.3, f=0.2, nsim=100))
O comando acima já guarda os resultados em uma tabela. Prossiga aumentando o número de espécies, mantendo os outros parâmetros constantes:
(sim.1 <- rbind(sim.1,may(S=40,C=0.3, f=0.2, nsim=100))) (sim.1 <- rbind(sim.1,may(S=60,C=0.3, f=0.2, nsim=100))) (sim.1 <- rbind(sim.1,may(S=80,C=0.3, f=0.2, nsim=100))) (sim.1 <- rbind(sim.1,may(S=90,C=0.3, f=0.2, nsim=100))) (sim.1 <- rbind(sim.1,may(S=100,C=0.3, f=0.2, nsim=100))) (sim.1 <- rbind(sim.1,may(S=110,C=0.3, f=0.2, nsim=100))) (sim.1 <- rbind(sim.1,may(S=120,C=0.3, f=0.2, nsim=100)))
O que lhe parece? Um gráfico pode ajudar:
## Grafico plot(p.estab~S, data=sim.1, xlab="N de espécies",ylab="Proporção matrizes estáveis")
A conectância pode ser interpretada como uma medida de complexidade do sistema. Será que maior complexidade aumenta as chances de estabilidade? Experimente:
##Riqueza e força de interação fixa, aumento de Conectancia ## (sim.2 <- may(S=120,C=0.3, f=0.2)) (sim.2 <- rbind(sim.2,may(S=120,C=0.28, f=0.2))) (sim.2 <- rbind(sim.2,may(S=120,C=0.26, f=0.2))) (sim.2 <- rbind(sim.2,may(S=120,C=0.24, f=0.2))) (sim.2 <- rbind(sim.2,may(S=120,C=0.22, f=0.2))) (sim.2 <- rbind(sim.2,may(S=120,C=0.20, f=0.2))) (sim.2 <- rbind(sim.2,may(S=120,C=0.18, f=0.2))) (sim.2 <- rbind(sim.2,may(S=120,C=0.16, f=0.2))) ##grafico plot(p.estab~C, data=sim.2, xlab="Conectancia",ylab="Proporção matrizes estáveis")
Pergunta: diversidade e complexidade levam a estabilidade?