Arquivo da tag: biologia

nMDS, como funciona?

Este é um post que eu queria escrever desde o mestrado durante as aulas de ecologia de comunidades. Hoje vamos aprender como realmente funciona uma das ordenações mais usadas no momento, o escalonamento multidimensional não métrico (nMDS).

Quando realizamos uma ordenação estamos buscando  uma forma de visualizar de forma mais simplificada as dimensões do nosso problema. Quem nunca criou uma tabela de dados após uma coleta e ficou na duvida de como explorar a informação? O nMDS é uma dessas formas de visualização dos dados que é extremamente robusta e consegue passar sobre as limitações usuais.

Como funciona

O objetivo do nMDS é representar os seus dados que estão em N-dimensões em sua forma original para algo pelo menos N-1 dimensões. Irei exemplificar dando um exemplo em R com o conjunto de dados iris. O conjunto consiste da mensuração de quatro características de 50 flores em três espécies (mais informações digita ?iris no R).

O nMDS é uma solução numérica e significa que vamos passar por varias tentativas até a aproximação de uma solução para o problema, abaixo lista as etapas que um nMDS executa:

  1. Calcular um índice de dissimilaridade dos dados originais;
  2. Distribuir aleatoriamente os pontos no espaço com N dimensões desejado (serve como solução inicial do problema);
  3. Calcular o índice de dissimilaridade da solução proposta;
  4. Comparar a dissimilaridade dos dados originais com a dissimilaridade da solução atual (esse passo é conhecido como Stress);
  5. Se o Stress for aceitável termine a execução do nMDS, caso contrario continue no passo 2 tentando melhorar a solução anterior.

Passo 1: envolve ter algum conhecimento sobre índices de dissimilaridade para escolha correta. A escolha de um índice de dissimilaridade afeta diretamente o resultado final do seu nMDS. O post sobre simetria de índices pode ajudar!

Usando o pacote vegan podemos calcular vários índices de dissimilaridade, abaixo um exemplo:

library(vegan)
vegdist(iris[, 1:4], "bray") 
# calcula o índice de Bray-Curtis para as colunas de mensuração do conjunto iris

 

 

Passo 2: como é um algoritmo iterativos temos que partir de algum ponto (mesmo que não seja bom!), a solução aleatória é empregada na primeira iteração desse algoritmo. No caso do conjunto de dados iris uma solução aleatória em duas dimensões:

random solution

Primeira solução proposta pelo nMDS. São exibidos 150 pontos, o que corresponde ao número de linhas no conjunto de dados iris.

Passo 3: mesmo procedimento do passo 1, só que agora vamos utilizar os dados do passo 2! Com isso temos a dissimilaridade original e a da nova solução proposta.

Passo 4: aqui vamos calcular o stress da solução proposta contra os dados originais. O stress é a métrica de ajuste da nossa solução aos dados originais. Quanto menor o stress melhor, formula abaixo:

S = \sqrt{ \frac{\sum (d_{ij} - D_{ij})^2}{\sum d_{ij}^2 } },

onde d_{ij} é a dissimilaridade dos dados originais na posição ij e D_{ij} a dissimilaridade da solução proposta no passo 2. Basicamente pegamos as duas dissimilaridades e subtraímos, quanto mais próximo a 0 mais similar são as soluções.

Passo 5: se o stress do passo anterior estiver dentro de uma margem ideal, terminamos o processo de nMDS. Essa margem ideal é arbitraria e logo não existe uma regra absoluta de qual valor é ideal, aqui entra a interpretação do resultado.

Se o valor do stress ainda não foi o ideal determinado pelo pesquisador voltamos ao passo 2 mas em vez de gerar uma solução aleatória vamos tentar mover os pontos da solução anterior para conseguir abaixar mais um pouco o stress. Essa “movida” de pontos que consome muito tempo no nMDS e dependendo da implementação é possível não encontrar uma boa solução!

O algoritmo de nMDS mais usado é a função wrapper do pacote vegan chamada metaMDS. Apesar de ser extremamente rápido na maioria dos casos o metaMDS pode ficar preso em um local optima e a sua solução ser um gráfico aleatório que não te leva a conclusão nenhuma.

Na minha implementação em R do nMDS para esse post eu utilizei um algoritmo genético que tenta chegar a solução por um processo similar a evolução, utilizando reprodução e seleção por fitness. Similar a evolução o algoritmo leva um tempo até chegar a solução, esse tempo pode variar bastante o que caracteriza uma desvantagem para esse algoritmo. Porem, nosso algoritmo não fica preso em local optima pois as mutações que ocorrem nas soluções criam novas possibilidade o tempo todo. A explicação detalhada do algoritmo genético vai ficar para outro post.

Interpretando

Abaixo temos os dois gráfico de ordenação onde em preto, vermelho e verde temos respectivamente as espécies Iris setosa, Iris versicolor e Iris virginica:

 

Como explicado nos passos anteriores o nMDS é construido tentando manter as dissimilaridades na mesma escala dos dados originais. Então, quanto mais próximos os pontos, mais similares eles são. Iris setosa é bem diferente de Iris versicolor e Iris virginica, enquanto Iris versicolor e Iris virginica são mais semelhantes entre si. Conclusão semelhante a Figura 1 de Fisher, R. A. (1936) que usou o mesmo conjunto de dados.

Coloquei a solução com algoritmo genético e a do vegan para demonstrar como a interpretação do stress é arbitraria. O stress do vegan é muito menor do que a nossa solução e várias pessoas iriam afirmar para ignorar a minha solução com stress 0,33. Nunca caiam em uma armadilha de ignorar resultados sem inspecionar gráficos. O gráfico do nMDS é apenas uma visualização dos seus dados com um número menor de dimensões. Não olhe para esse gráfico tentando interpretar a distância de cada ponto, tente procurar agrupamento de pontos (ou ausência deles).

As interpretações devem parar aqui.

  • No nMDS não existe eixo a regra que o primeiro eixo possui a maior variação dos dados;
  • Não se deve usar os eixos do nMDS em outras analises. Os eixos do nMDS não são ortogonais!
  • Se ainda assim quiser usar os eixos, reduza o número de dimensões do nMDS para uma ou utilize todos os eixos em forma de interação (caso seja regressão).

Lembre-se o nMDS é para visualizar os seus dados e entender as dissimilaridades (ou similaridades) entre as suas unidades amostrais.

Conclusão

Soluções numéricas são as minhas favoritas para ensinar. Podem não te dar o resultado em 200 milissegundos como as analíticas mas consigo explicar para minha mãe sem ter que repassar todo o ensino médio da matemática novamente.

Cuidado com valores de corte (p < 0,05, stress < 0,1), eles são perigosos e já causaram muitas estragos invalidando várias conclusões de forma cega. Não importa se é ciência, você ainda precisa fazer as interpretações!

Ainda acho que nMDS deveria ser a primeira ordenação ensinada. Você pode até ensinar sem falar que é o nMDS e vão achar que algum tipo de técnica muito básica, quando falar que é nMDS todos vão ficar espantados que é “só isso?”.

Referência

Como sempre códigos em R desse post no github.

Fisher, R. A. (1936) The use of multiple measurements in taxonomic problems. Annals of Eugenics, 7, Part II, 179–188.

Anúncios

IPT pronto para dados ecológicos!

Durante esse mês que passou muitas coisas aconteceram no desenvolvimento do IPT. A meu ver a principal delas para comunidade ecológica foi a incorporação do core de eventos e a aceitação dos metadados com o tipo evento de amostragem.

Durante os testes da versão de desenvolvimento notei que apesar da criação de um core dedicado para eventos ainda era necessário associar uma extensão de ocorrência. O que não é uma verdade para dados ecológicos. É comum a coleta de variáveis ambientais sem espécies associados, como por exemplo, emissão de carbono ou qualidade da água. Com isso fiz um pull request que foi aceito mas com a ressalva de exibir um aviso de atenção, já que não consideram o cenário comum no momento.

Outra mudança interessante foi o versionamento das extensões que também contam com um sistema de atualização mais inteligente. Anteriormente era necessário atualização manual das extensões ou correria o risco dos dados parassem de exibir na interface web.

E finalmente o lançamento da versão 2.3 do IPT contendo as mudanças citadas acima e a migração para o github.com.

Então que venham os dados ecológicos para avaliar as mudanças novo IPT.

Aprendendo e Aplicando

Toda quinta-feira durante a tarde participo do núcleo de estudos em botânica (nebot), nele ocorrem palestras, aulas e no fim sempre uma discussão do que vimos.

Nesta ultima quinta-feira tivemos uma aula sobre Sucessão Primaria e Secundaria com a Professora Andreza de Anatomia vegetal (farei no próximo período) .

Não tenho a capacidade pra falar como a professora com doutorado, mas resumidamente seria:

Sucessão primária : é a primeira colonização de plantas em um local geralmente pode ser visto em pedras que estão sofrendo intemperismo.

Sucessão Secundária: ocorre apenas quando todas as plantas foram removidas do local, desmatamento seria um bom exemplo.

Recentemente ocorreu uma queimada perto da casa de uma amiga e sempre passo por lá de condução eu vejo a terra preta, mas com o tempo comecei a ver uma árvore brotando e agora vejo 7 bem próximas uma das outras. As árvores são embaúbas, suas sementes só germinam na presença de luz (pioneiras), fácil de ser identificada quando se olha uma floresta de cima pelas suas folhas pratas, dando contraste com a paisagem.

O engraçado é ver meus amigos dizendo que eu aprendo outro idioma com a biologia, mas não é aprender outro idioma é aprender o nome de eventos e estruturas que ajudam a universalizar o descrição de modo científico.

É fácil identifica-las pelo contraste que causam (clique na imagem para ampliar):
embaúbas