Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
ecovirt:roteiro:sucess:div_estab [2019/02/04 15:20] prado |
ecovirt:roteiro:sucess:div_estab [2020/02/02 21:10] prado [Equilíbrio com coexistência] |
||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | <WRAP tabs> | ||
+ | * [[ecovirt:roteiro:sucess:div_estab|{{:ecovirt:rlogo.png?20|}}]] | ||
+ | </WRAP> | ||
+ | ====== Diversidade e estabilidade ====== | ||
+ | |||
+ | {{http://imgs.xkcd.com/comics/computer_problems.png?400}} | ||
+ | |||
+ | 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 [[http://en.wikipedia.org/wiki/Dynamical_system|sistemas dinâmicos]]. | ||
+ | |||
+ | É esta abordagem que trouxe para a ecologia equações para descrever a dinâmica de populações, como a [[http://en.wikipedia.org/wiki/Logistic_function#In_ecology:_modeling_population_growth|equação logística]] e o sistema de [[http://en.wikipedia.org/wiki/Lotka%E2%80%93Volterra_equation|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). | ||
+ | |||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | 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 [[ecovirt:roteiro:math:stabilitysage|introdução à análise de estabilidade em sistemas dinâmicos.]] | ||
+ | </WRAP> | ||
+ | |||
+ | |||
+ | ===== Preparação: ambiente R ===== | ||
+ | |||
+ | 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: | ||
+ | |||
+ | - Instale em seu computador o ambiente R, com os pacotes adicionais ''deSolve'' e ''rootSolve''. A [[http://www.r-project.org/|página do R]] tem instruções de instalação. Veja também nosso [[ecovirt:roteiro:soft:instalacaor| roteiro de instalação do R]]. | ||
+ | - Crie um diretório em seu computador para os exercícios. | ||
+ | - Copie para este diretório os arquivos abaixo: | ||
+ | - {{:ecovirt:roteiro:math:eq_funcoes.r}} | ||
+ | - {{:ecovirt:roteiro:sucess:eq_lv_comandos.r|}} | ||
+ | - Abra o R a partir do arquivo de comandos ''eq_lv_comandos.r''. Certifique-se de que você está no diretório onde estão os arquivos. | ||
+ | - Os comandos neste arquivo estão na mesma ordem deste exercício. Siga o roteiro, enviando os comandos indicados a cada seção. | ||
+ | - Se você não sabe como enviar os comandos do arquivo faça este [[ecovirt:roteiro:soft:rprincip|tutorial]]. | ||
+ | - Carregue no R os pacotes e funções que vamos usar neste exercício com os comandos: | ||
+ | <code> | ||
+ | library(deSolve) | ||
+ | library(rootSolve) | ||
+ | source("eq_funcoes.r") | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | ===== Duas populações ===== | ||
+ | |||
+ | No roteiro de [[ecovirt:roteiro:math:stabilitysage| análise de estabilidade]] vimos o critério de estabilidade local em sistemas dinâmicos | ||
+ | |||
+ | <WRAP center round box 60%> | ||
+ | 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. | ||
+ | </WRAP> | ||
+ | |||
+ | 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 [[http://en.wikipedia.org/wiki/Competitive_Lotka%E2%80%93Volterra_equations|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: | ||
+ | |||
+ | * $V_1$, $V_2$ são as velocidades de crescimento populacional | ||
+ | * $r_1$, $r_2$ são as taxas de crescimento intrínseco | ||
+ | * $K_1$, $K_2$ são as capacidades de suporte | ||
+ | * $\alpha$, $\beta$ são os coeficientes de competição de cada espécie sobre a outra | ||
+ | |||
+ | 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 2 | ||
+ | * ''r1'' e ''r2'' : taxas intrínsecas de crescimento | ||
+ | * ''K1'' e ''K2'' : capacidades de suporte | ||
+ | * ''alfa'' e ''beta'': coeficientes de competição | ||
+ | * ''time'' : tempo máximo | ||
+ | |||
+ | Verifique a função com este comando: | ||
+ | |||
+ | <code> | ||
+ | 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) | ||
+ | </code> | ||
+ | |||
+ | ==== Equilíbrio com coexistência ==== | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <code> | ||
+ | (lv.n1 <- lv.neq(r1=0.2,K1=150,r2=0.2,K2=100,alfa=0.2,beta=0.1)) | ||
+ | </code> | ||
+ | |||
+ | ==== Estabilidade ==== | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <code> | ||
+ | ## 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) | ||
+ | </code> | ||
+ | |||
+ | Faça o mesmo para uma combinação de parâmetros que satisfaça a segunda condição: | ||
+ | |||
+ | <code> | ||
+ | ## 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) | ||
+ | </code> | ||
+ | |||
+ | O que acontece se você inverte a perturbação? | ||
+ | |||
+ | <code> | ||
+ | ## 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) | ||
+ | </code> | ||
+ | |||
+ | ==== Interpretação matemática ==== | ||
+ | |||
+ | A lógica da análise matemática da estabilidade local deste sistema é a mesma da aplicada para [[ecovirt:roteiro:math:stabilitysage#estabilidade_da_logistica|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 [[http://en.wikipedia.org/wiki/Partial_derivative|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: | ||
+ | |||
+ | |||
+ | <WRAP box red 50% center round> | ||
+ | |||
+ | 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. | ||
+ | |||
+ | </WRAP> | ||
+ | |||
+ | [[http://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors|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 [[http://stat.ethz.ch/R-manual/R-patched/library/base/html/eigen.html|eigen]]. | ||
+ | |||
+ | === Cálculos no R === | ||
+ | |||
+ | 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: | ||
+ | |||
+ | <code> | ||
+ | ##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) | ||
+ | </code> | ||
+ | |||
+ | Agora aplicamos a função ''eigen'' para obter os autovalores desta matriz: | ||
+ | |||
+ | <code> | ||
+ | ##Autovalores | ||
+ | eigen(j1, only.values=TRUE)$values | ||
+ | </code> | ||
+ | |||
+ | Faça o mesmo com a segunda combinação de parâmetros que experimentamos: | ||
+ | |||
+ | <code> | ||
+ | ## 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 | ||
+ | </code> | ||
+ | |||
+ | **Pergunta:** Os resultados desta análise são coerentes com o que você observou ao perturbar o sistema? | ||
+ | |||
+ | |||
+ | |||
+ | ===== O Estudo do Barão May ===== | ||
+ | |||
+ | 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: | ||
+ | |||
+ | - Defina o número de espécies do sistema, S | ||
+ | - Defina a fração de interações potenciais que ocorrem. Isto é a conectância da matriz, C | ||
+ | - Crie uma matriz com S linhas por S colunas | ||
+ | - Preencha a diagonal desta matriz com o valor -1 | ||
+ | - Preencha ao acaso as células restantes com valores aleatórios até que se alcance a conectância | ||
+ | - Verifique se os autovalores desta matriz são todos negativos. Se sim, conte como um sistema estável | ||
+ | |||
+ | 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**. | ||
+ | |||
+ | ==== Simulando ==== | ||
+ | |||
+ | A função ''may'' reproduz a simulação, e tem os argumentos: | ||
+ | |||
+ | * ''S'' : número de espécies | ||
+ | * ''C'' : conectância | ||
+ | * ''f'' : força média das interações | ||
+ | * ''nsim'': número de repetições da simulação | ||
+ | |||
+ | A função retorna a proporção das repetições que produziram sistemas estáveis ((isto é, matrizes de comunidades com todos os autovalores negativos)). | ||
+ | |||
+ | Vamos começar com 20 espécies, conectância de 0,3 ((30% das células da matriz de comunidades tem valor diferente de zero)) e força de interação de 0,2: | ||
+ | |||
+ | <code> | ||
+ | (sim.1 <- may(S=20,C=0.3, f=0.2, nsim=100)) | ||
+ | </code> | ||
+ | |||
+ | O comando acima já guarda os resultados em uma tabela. Prossiga aumentando o número de espécies, mantendo os outros parâmetros constantes: | ||
+ | |||
+ | <code> | ||
+ | (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))) | ||
+ | </code> | ||
+ | |||
+ | O que lhe parece? Um gráfico pode ajudar: | ||
+ | <code> | ||
+ | ## Grafico | ||
+ | plot(p.estab~S, data=sim.1, xlab="N de espécies",ylab="Proporção matrizes estáveis") | ||
+ | </code> | ||
+ | |||
+ | A conectância pode ser interpretada como uma medida de complexidade do sistema. Será que maior complexidade aumenta as chances de estabilidade? Experimente: | ||
+ | |||
+ | <code> | ||
+ | ##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") | ||
+ | </code> | ||
+ | |||
+ | **Pergunta:** diversidade e complexidade levam a estabilidade? | ||
+ | |||
+ | ===== Para saber mais ===== | ||
+ | |||
+ | * **Gotelli, N. 2007. Ecologia. Londrina, Ed. Planta.** (A referência básica sobre os modelos dinâmicos em ecologia). | ||
+ | * **May, R.M. 1972. Will a large complex system be stable? Nature, 238, 413-414.** (O artigo clássico que estabeleceu o conceito de equilíbrio de redes tróficas como solução de um sistema de equações de Lotka-Volterra.) | ||
+ | * **May, R.M. 2001. Stability and complexity in model ecosystems. Princeton, Princeton University Press.** (Nesta influente monografia Robert May desenvolve as idéias do artigo de 1972. A primeira edição é de 1973, e o livro foi re-editado na coleção [[http://press.princeton.edu/catalogs/series/plb.html|Princeton Landmarks of Biology]] em 2001.) | ||
+ | * **Sarah P. Otto & Troy Day 2007. A Biologist's Guide to Mathematical Modeling in Ecology and Evolution. Princeton, Princeton University Press.** (Ótima introdução à matemática, de biólogos para biólogos. Como neste exercício, muita vezes usa abordagens menos tradicionais e mais intuitivas. Uma ótima fonte para quem quiser entender melhor os detalhes das análises de estabilidade e algebra matricial que usamos aqui. Veja também o [[http://www.zoology.ubc.ca/biomath/|site do livro]].) | ||
+ | * R Development Core Team (2012). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URL [[http://www.R-project.org/]]. | ||
+ | |||
+ | |||
+ | {{tag> R cálculo derivada equação_diferencial lotka-volterra crescimento_logístico}} |