Se você um dia se deparar com um ecólogo e lhe perguntar “Qual a característica mais interessante em ser um ecólogo?”, é bem provável que a resposta que você receba seja: “o contato com a natureza”. Mas se você fizer esta mesma pergunta para mim, a resposta seria bem diferente. Isso não quer dizer que eu não ache o contato com a natureza uma característica importante, pelo contrário, mas como dizia o grande Edward O. Wilson: ‘na ciência, diferentemente da guerra, você deve marchar para longe dos sons das armas e não ao encontro delas‘.
A minha forma de fazer ecologia hoje, ou pelo menos parte dela, se consolidou ao longo do meu doutorado no Laboratório de Limnologia de 2008 a 2012. Dentre os diversos temas de pesquisa abordados no laboratório, o meu tema de pesquisa se focava no comportamento animal, principalmente no comportamento de forrageamento entre predadores e presas. Meu trabalho era basicamente teórico e envolvia a construção de simulações computacionais ( ou como alguns gostam de chamar, os famosos experimentos in-silico) que buscavam entender as consequências ecológicas do trade-off entre forrageamento e risco de predação. Basicamente esses modelos eram solucionados a partir de diferentes algoritmos de otimização programados em linguagem C ou C++. E se hoje alguém me perguntar qual a característica mais intrigante das ciências da computação eu responderia sem sombra de dúvidas que seriam os algoritmos.
Basicamente um algoritmo é um cálculo baseado em um conjunto de instruções passo-a-passo. Mas qual a graça de um algoritmo? Problemas que poderiam levar anos para que alguém encontrasse a resposta, poderiam ser resolvidos em segundos através de um algoritmo. Bem, pense no seguinte exemplo, imagine que você queira procurar uma página na internet que contenha algo sobre “Cadeias Tróficas”. Você poderia ir de página em página na internet (14 bilhões) e procurar se em alguma delas o termo “Cadeias Tróficas” aparece. Quanto tempo isso levaria? Possivelmente anos, o que tornaria impraticável a busca pela internet. No entanto, em vez de procurar página por página, você pode procurar apenas em páginas mais importantes, fazendo um rank de todas as páginas na internet. Isso é exatamente o que o Google faz quando usa seu sistema de busca, e é exatamente o algoritmo utilizado para o ranqueamento que permite que buscas na internet sejam possíveis e plausíveis.
Basicamente o algoritmo de ranqueamento do Google funciona da seguinte forma: A internet é uma rede direcionada na qual as páginas (ou nós) estão conectadas umas as outras por links. Nós podemos escrever uma matriz “A” onde a presença ou ausência de um link da página-linha i para a página-coluna j como entradas contendo 1 ou zero. O algoritmo de ranqueamento do Google, conhecido como PageRank (em função do seu criador e co-fundador do Google, Larry Page) designa uma página como importante se ela recebe links de uma página também importante, e soluciona esse problema recursivo através de álgebra linear. Assim, cada página recebe um escore de importância e cada link para outra página (que aqui vamos designar de aij como em uma notação de matriz) contém um escore similar e proporcional a este valor de importância. A importância da página é obtida pelo somatório dos scores designados pelos links que chegam nela. O problema de recorrência (a página mais importante é quem recebe links de quem é também importante) é resolvido construindo-se uma nova matriz “S”, em que cada elemento representa a fração da importância designada a cada link, ou seja:
$latex s_{ij}=\frac{a_{ij}}{\sum_{j}a^{_{ij}}}$
(i e j representam linhas e colunas em notação de matriz respectivamente)
Os escores das páginas mais importantes são dadas pelos valores do autovetor do autovalor dominante desta nova matriz. No entanto essa técnica só pode ser empregada se a matriz “S” for irredutível e primitiva, o que não acontece na grande maioria dos casos. Por isso é necessário modificar o cálculo de ranqueamento incorporando um fator chamado “damping factor”. Esse fator, em linhas gerais, representa quando alguém salta de uma página na internet para uma outra, não através de um link, mas sim de forma aleatória (digitando um endereço na barra de endereços por exemplo). O cálculo do PageRank pode ser feito de forma iterativa, de forma parecida com o método descrito ao final deste texto.
E o que Ecologia tem a ver com isso? Bem, uma cadeia trófica também é uma rede, que pode ser representada por nós e links. Os nós seriam as espécies e os links seriam as relações alimentares, ou seja, quem se alimenta de quem. Essa forma de visualizar uma cadeia trófica tem sido amplamente utilizada na ecologia. Para sua sobrevivência, as espécies precisam ser capazes de receber energia e matéria de produtores primários através de algum caminho por esta rede. Será que o algoritmo de ranqueamento do Google poderia ser utilizado numa cadeia trófica pra dizer que espécie é então a mais importante? Neste caso algumas modificações precisariam ser consideradas. Primeiro, em função do funcionamento de cadeias tróficas, uma espécie importante seria aquela que serve de alimento para outras espécies que também são importantes. Ou seja, seria diferente de uma página na internet, que é importante pois é apontada por páginas também importantes, enquanto uma espécie seria importante pois ela aponta para espécies também importantes. Outro fator importante é que uma matriz descrevendo os links entre espécies precisa ser irredutível e primitiva. No caso de cadeias tróficas o “damping factor” não pode ser utilizado para resolver este problema, pois a matéria não pula de forma aleatória entre os nós de uma cadeia trófica, ela precisa necessariamente seguir os caminhos estabelecidos pelas relações alimentares.
Uma solução para esse aparente problema é fazer com que todas as espécies estejam conectadas a um único nó. Biologicamente isso é bastante plausível, pois se estamos falando da ciclagem de matéria, esse nó poderia ser considerado a via de detritos ou o ooze proposto por Raymond Lindeman em seu clássico trabalho sobre eficiência de transferência de energia nas cadeias alimentares. Com essas modificações podemos então usar o algoritmo PageRank e calcular a importância das espécies em uma cadeia trófica em função da sua topologia, ou seja, em função da conectância que as espécies têm umas com as outras.
Consideremos as seguintes matrizes M1 e M2,
A matriz M1 representa uma cadeia trófica simples e linear, enquanto a matriz M2 representa uma cadeia com a presença de um predador onívoro que se alimenta tanto do consumidor quanto do produtor primário. Na verdade, apenas um link difere a topologia das duas cadeias (A serve de alimento para C, o predador onívoro). Mas qual seria o efeito deste novo link na importância das espécies? Isso pode ser respondido pelo nosso algorítimo PageRank modificado.
Ao aplicarmos o algoritmo PageRank a partir de um algorítimo implementado para MATLAB (o código fonte está no final deste post) , temos os seguintes valores de rank, ou importância:
RankM1 = [A = 0.333, B =0.222, C=0.1111, D=0.333] -> Cadeia com Predador Normal
RankM2 = [A=0.3529, B=0.1764, C=0.1177, D=0.3529] -> Cadeia com Predador Onívoro
Mesmo que a ordem de importância não tenha se alterado, esses resultados mostram que a magnitude de importância do predador aumenta com a onivoria, mesmo que marginalmente, juntamente com uma redução da importância do consumidor primário. Bem, o que então o nosso valor de importância quer realmente dizer. A rede trófica aqui esquematizada, em última análise, pode ser descrita como uma cadeia de Markov, onde cada espécie apresenta uma probabilidade de transição para outro estado (outra espécie). Segundo a teoria de Markov os valores do PageRank nos dariam a probabilidade de uma unidade de biomassa sair de determinado nó (i.e. espécie) depois de um número suficientes de “eventos de predação”. Desta forma, nossa modificação na montagem do algoritmo (principalmente em relação a montagem da matriz) faz com que o valor de importância dado pelo algoritmo PageRank se traduza no valor proporcional ao fluxo de biomassa que passaria por cada nível trófico. Em outras palavras, se cada nível trófico nessas cadeias pudesse ser expresso por equações diferenciais, que descrevem a dinâmica de cada espécie, em equilíbrio, a quantidade do fluxo de biomassa entrando e saindo de cada espécie seria proporcional ao valores de RankM1 e RankM2. Isso só seria possível se assumirmos que todas as presas fornecem a mesma quantidade de nutrientes. Desta forma o algoritmo PageRank poderia ser utilizado como um modelo nulo dos efeitos da configuração da teia trófica na biomassa de níveis tróficos, se assumirmos que as espécies apresentam coeficientes de interação iguais e ciclos de vida semelhantes. Em outras palavras, poderíamos abstrair todos os outros parâmetros relevantes para a dinâmica de níveis tróficos e avaliar apenas o efeito da configuração da teia trófica.
Mas o que se ganha com isso? Resultados similares a estes apresentados poderiam ser obtidos com o uso de um conjunto de equações diferenciais descrevendo a dinâmica de cada nível trófico. Mas como fazer para o caso em que tenhamos 20 ou 30 espécies. Utilizar 20 ou 30 equações diferenciais seria matematicamente impraticável.
No entanto, utilizar o algoritmo aqui descrito para 20 ou 30 nós não é problema algum uma vez que ele é capaz de lidar com até milhões de nós de forma extremamente eficiente ao ser empregado em buscas na internet. Desta forma, podemos utilizar o algoritmo do Google para predizer a distribuição da biomassa em teias trófica com muitas espécies e avaliar como essa distribuição se altera em função da configuração da teia, com diferentes intensidades de generalismo e onivoria por exemplo. É nisso que tenho dedicado parte do meu tempo nos últimos meses. Isso poderia ser importante pra predizer como níveis tróficos de topo de cadeias extremamente complexas, como aquelas observadas em ambientes aquáticos, são afetadas pela extinção de espécies na base destas cadeias. Isso seria impraticável com o uso tradicional de equações diferenciais, mas é facilmente obtido com o uso do algoritmo de ranqueamento do Google.
Este simples exemplo mostra como avanços científicos em determinadas áreas da ciência podem ser empregados na construção do conhecimento ecológico. Qual é a característica mais interessante em ser ecólogo? Bem, pra mim é a capacidade de trabalhar com biologia, matemática e computação (e em alguns casos também com física, química…) ao mesmo tempo e com um objetivo comum: entender os fatores que afetam a abundância e distribuição de espécies no nosso planeta.
Qualquer dúvida ou comentário é só escrever aqui em baixo.
Código fonte para MATLAB para o cálculo do PageRank (sem o “damping factor”), calcule a importância das suas espécies para sua própria cadeia:
% início do código
% Parametro c, fator de convergência
% M matriz simples sem onivoria modificada para que o somatório Mj =1
M = [0 1 0 1/3 ; 0 0 1 1/3 ; 0 0 0 1/3 ; 1 0 0 0 ];
T = size(M, 2);
c=0.0001
rankp = rand(T, 1);
rankp = rankp ./ norm(rankp, 1);
rankf = ones(T, 1) * inf;
S = M .* ones(T, T);
while(norm(rankp – rankf, 1) > c)
rankf = rankp;
rankp = S * rankp;
rankp = rankp ./ norm(rankp, 1);
end
rankp
% fim do código
Querido amigo,
Gostei muito do post… Mais uma oportunidade de aprender com você!
O que você tem a dizer sobre a inclusão de dinâmicas temporais nestas teias?
Se no Google, uma página aumenta sua importância cada vez que é acessada, em teias tróficas, as espécies devem diminuir sua importância relativa cada vez que são predadas, por exemplo, pois diminuiria o número de individuos em sua população.
Eventualmente, esta espécie poderia ser “esquecida” por um predador, aumentar sua densidade e voltar a ser importante…
Ou seja, o rank de cada espécie não é constante, seria dinâmico?
Estou certa?
Isto ajudaria a explicar o motivo de teias tróficas mais diversas seriam mais estáveis no tempo…
E o que significa: “irredutível e primitivo”?
Oi Aliny, que bom que você gostou do post. A pergunta foi grande então a resposta vai ser um pouco longa.
Em relação a dinâmica temporal, na verdade ela está presente nestas teias. No texto eu até coloco o termo “após suficiente eventos de predação” que poderia ser substituído por “após um tempo suficientemente grande” ou algo assim. Os valores de rank são para o sistema em equilíbrio, seria a figura final. Você pode imaginar que no começo todo mundo teria o mesmo rank e ele vai mudando ao longo do tempo em função das probabilidades de transição, que são dadas pela quantidade de link para cada outra espécie, até que se atinge um equilíbrio.
Na verdade a importância não está muito relacionada a quantidade de acessos mas sim a quantidade de links que uma página recebe ou se ela recebe um link de alguém que também é importante. Por exemplo, se você fizer um artigo no Wikipedia e no artigo tiver um link para uma página que você criou, sua página vai começar a aparecer bem ranqueada pelo Google, mesmo tendo apenas um link pra ela, pois o Wikepedia é uma página importante (recebe muitos links para ela, inclusive links internos).
Modelos de forma geral são parecidos com a vida em alguns casos, você precisa ceder de um lado pra ganhar de outro. Infelizmente nestas formulações não temos uma resposta funcional do predador que nos daria exatamente o que você sugere, uma variação na taxa de predação em função da densidade de presas. E veja em que nenhum momento eu falo em demografia. Essa “taxa” na verdade é substituída por uma análogo estocástico e é dado pelas probabilidades de transição, mas não existe uma resposta funcional associada a isso. É por isso que eu enfatizo a noção de modelo nulo devido a equivalência de uma série de parâmetros, entre as espécies, que você poderia pensar na descrição das interações.
Se você pensar na resposta funcional do tipo III ela é capaz de gerar um padrão parecido com esse que você colocou e de fato ela é reconhecidamente uma resposta funcional estabilizadora. Eu acredito até que esta idéia vai ao encontro do conceito de “storage effect” para a coexistência de espécies, pois permite que quando em baixa densidade você possa se recuperar. E isso nos leva a questão a coexistência. Teias mais diversas são mais estáveis? Bem segundo Robert May, não. O tabalho dele também envolve matrizes e análises de sistemas dinâmicos mas com uma idéia bem diferente de estabilidade. Acho que a sua idéia de estabilidade estaria mais relacionada a como as espécies co-variam no tempo e invariavelmente com diversidade, o que requer uma definição diferente de estabilidade. É um assunto profícuo certamente.
A questão da matriz ser primitiva e irredutível está relacionada a um teorema importante chamado teorema de Perron-Frobenius. Esse teorema diz que se uma matriz for primitiva e irredutível ela terá um autovalor dominante e um autovetor positivo correspondente a este auto valor (é esse que a agente precisa achar!). Logo, todas as transformações no algoritmo só vão fazer sentido se no final das contas a resposta que ele me dá é o meu autovetor em questão. As contas só funcionam por causa destas propriedades. E o que é ser irredutível e primitiva, são características que matrizes precisam ter. Pra ser primitiva você precisa ser irredutível com elementos positivos na principal diagonal. O conceito de irredutível é mais complicado, para uma matriz de permutação qualquer P (que é uma matriz com apenas um 1 e cada linha e coluna e todos os outros valores zero, um sudoku binário), se você multiplica essa matriz transposta pela sua matriz de interesse (e.g., M) vezes novamente a matriz de permutação, o resultado não pode ser uma matriz triangular superior da sua matriz de interesse M. Ela não pode ter os valores exatamente iguais a sua matriz M do lado direto da diagonal principal e zeros do outro lado. Você sempre pode pedir pro programa (Matlab, Mathematica) checar isso pra você de forma automática.
Fala aí!
Achei o post muito bom e está muito bem escrito! Sem dúvida um tema muito interessante e dá pra discutir bastante coisa.
Eu fiquei pensando umas coisas e tenho uma pergunta. O modelo admite que cada nó tem uma estrutura discreta (ou tem ou não o nó). Só que imaginando que um nó é uma espécie e essa espécie é composta por vários indivíduos naquela rede, existe uma variação entre esses indivíduos no número de links que eles estabelecem. Assim, alguns indivíduos estabeleceriam todos os links daquele nó e outros indivíduos não, mesmo em uma situação de equilíbrio, como você falou.
Uma outra coisa que tem haver com isso é o tamanho da população que compõem o nó. Por ser uma medida discreta (existe ou não o nó), não importa se existem milhares de indivíduos ou apenas um indivíduo compondo aquele nó: o valor para ele é o mesmo. Mas pensando em uma situação em que haja apenas um indivíduo na população e outra em que haja milhares de indivíduos, para mim é impossível não pensar que vai haver uma grande diferença no número de links entre as duas situações (afinal, um indivíduo interagir com um monte de outros é complicado de imaginar) e até mesmo na importância intrínseca daquele nó (afinal, um nó com apenas um indivíduo deve ter uma importância muito grande, pois sem esse indivíduo o nó desaparece, independente do número de links que ele estabelece). Isso seria equivalente a pensar que para alguns temas/buscas do google devem existir pouquíssimas páginas (sei lá, sobre um tema muito específico da física quântica), então qualquer página que toque no assunto (mesmo que não seja do tema em questão) vai apontar sempre para aquele pequeno conjunto de páginas.
Talvez tenha ficado meio complexo essas colocações. Mas eu as coloquei para embasar um pouco minha pergunta: existe forma de dar um peso ao cálculo da importância do nó baseado em informações contínuas sobre ele (e.g., abundância de indivíduos no nó, variação no número de links por indivíduo dentro do nó)?
Parabéns pelo post!
Oi Nicholas,
Que bom que você gostou do post, e também obrigado pela ajuda na formatação.
Em relação a sua pergunta você tem toda razão. Alguns autores avaliando o tema “nestedness” em teias tróficas, não me arrisco a traduzir isto, mostram que os links em cadeias tróficas não são aleatórios, existe algo determinando essas conexões e se você considera um modelo de nicho para estabelecer qual a possibilidade de ocorrência de determianda configuração de teia, certamente você pode entrar com dados como densidade, abundância para estabelecer isso. E isso não é negligenciado de maneira alguma. Muitos estudos vem trabalhando com apenas a noção topológica, sem integrar adinâmicas populacionais, para estudar teias reais. E nessas teias muitas espécies possuem apenas uma presa, logo a extinção desta presa leva a extinção de outras espécies e fragmentação de toda teia, uma conclusão baseada apenas na topologia pois você sabe que essa ligação existe de fato.
Certamente existe a forma de dar um peso para determiandos links, isso inclusive é implementado em algoritmos de busca, mas seriam modificações do PageRank, como por exemplo o “Topic-Sensitive PageRank” que faz exatamente isso, dá pesos diferenciados a determiandos links. A questão é sempre pensar no que você procura responder e qual seria o melhor modelo pra lidar com a sua questão. Eu quero dizer o seguinte, se você vai fazer uma análise da configuração da teia trófica e pra simplificar seu trabalho você quer assumir que todas a ligações tem o mesmo peso, pois essa variável pro seu estudo não é importante, não tem sentido usar uma abordagem mais complexa.
Mas novamente, seria impossível entender o todo, o sistema em si, sem incoporar abundância, força de interação etc… esses parâmetros são fundamentais com certeza. Mas as vezes você precisa ser reducionista, ir fragmentado pra entender o papel de cada aspecto e a partir daí tentar avaliar as propriedades emergentes quando as coisas começam a ser colocadas juntas.