Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
1 Disciplina Análise Multivariada no R BOT00170 ANÁLISE MULTIVARIADA NO R Dr. Daniel Dutra Saraiva daniel.dutra.saraiva@gmail.com 2021 mailto:daniel.dutra.saraiva@gmail.com 2 APRESENTAÇÃO Esta apostila foi elaborada com o objetivo de auxiliar os alunos da disciplina Análise Multivariada no R, oferecida pelo Programa de Pós-Graduação em Botânica da Universidade Federal do Rio Grande do Sul (UFRGS). A disciplina em questão aborda os princípios básicos da análise multivariada e sua aplicação na pesquisa científica. A disciplina tem um viés prático, baseado na “análise exploratória” de dados biológicos e ambientais, usando a linguagem de programação R (https://www.r-project.org). O programa usado na disciplina é o RStudio (https://www.rstudio.com), um ambiente de desenvolvimento integrado para a linguagem R, o qual fornece um editor de texto avançado para a edição de comandos (entre outras funcionalidades). Esta apostila resulta de uma “compilação” de conceitos, métodos e dados multivariados, publicados em livros-texto, tutoriais e pacotes do R. A maioria das funções e dados usados foram extraídos de pacotes nativos do R (carregados na instalação do programa) e do pacote ‘vegan’ (https://cran.r- project.org/web/packages/vegan/vegan.pdf). Portanto, as informações reunidas aqui são para uso “exclusivamente didático” na disciplina Análise Multivariada no R. https://www.r-project.org/ https://www.rstudio.com/ https://cran.r-project.org/web/packages/vegan/vegan.pdf https://cran.r-project.org/web/packages/vegan/vegan.pdf 3 1. Informações básicas 1.1. Ambiente R O R é uma linguagem e ambiente para computação estatística e gráfica (similar à linguagem S). Ele fornece uma ampla variedade de testes estatísticos e técnicas gráficas. Foi criado como um projeto de pesquisa pelo neozelandês Ross Ihaka e pelo canadense Robert Gentleman. Desde 1997, o R está sob constante desenvolvimento por um grupo denominado R Core Team (https://www.r- project.org/contributors.html). O R é um “software livre” e de “código aberto”, distribuído sob Licença Pública Geral (https://www.gnu.org/). Ele pode ser livremente distribuído entre usuários e instalado em diversos computadores. Está disponível para os sistemas operacionais Linux, MacOS X e Windows. É importante ter em mente que o R não é simplesmente um programa de estatística, uma vez que ele permite realizar operações matemáticas, elaborar mapas, manipular banco de dados, entre outros procedimentos. 1.2. Instalação do R e RStudio Na página do R (https://www.r-project.org/), clique em CRAN (Comprehensive R Archive Network) à esquerda, e escolha um mirror (por exemplo, a Universidade Federal do Paraná) para baixar o arquivo de instalação (arquivo “win.exe” para Windows ou “.pkg” para Mac). Em qualquer caso, siga os procedimentos normais de instalação. O RStudio é uma interface funcional e amigável para o R. Para baixar e instalar o RStudio, vá em https://www.rstudio.com/products/rstudio/download/ e escolha a opção RStudio Desktop, que é a versão gratuita. Clique no link para baixar o instalador para seu computador e, novamente, siga os procedimentos normais de instalação. Note que o R precisa estar instalado no seu computador https://www.r-project.org/contributors.html https://www.r-project.org/contributors.html https://www.gnu.org/ https://www.r-project.org/ https://www.rstudio.com/products/rstudio/download/ 4 para instalar o RStudio. Durante o processo de instalação, o RStudio integra-se à ultima versão do R instalada em seu computador. 1.3. RStudio O RStudio é um ambiente de desenvolvimento integrado para a linguagem R. Ele oferece a integração entre o R e um editor de texto avançado que possibilita a edição de comandos. Diferentemente do R, a janela do RStudio é dividida em quatro partes (Fig. 1): Script: A tela superior esquerda do RStudio é o editor de texto onde você vai escrever seu roteiro de análise, ou seja, inserir os comandos. Console: No canto inferior esquerdo fica o console. O console nada mais é do que uma seção aberta de R, em que os comandos são executados. Environment e History: Ficam no canto superior direito. Os objetos criados e o histórico dos comandos podem ser acessados. Files, Plots, Packages e Help: Ficam no canto inferior direito. Você pode explorar pastas e arquivos diretamente do RStudio na aba Files; os gráficos que forem feitos aparecerão na aba Plots. Os pacotes instalados em sua máquina estão listados em Packages. As ajudas das funções aparecem em Help. E o Viewer serve para visualização de páginas em HTML e JavaScript. 5 Figura 1. Layout do RStudio. 1.4. Pacotes O R é composto por diversos pacotes (packages) ou bibliotecas (libraries). Um pacote nada mais é do que um conjunto de comandos ou funções. Por exemplo, as funções básicas do R estão agrupadas em pacotes nativos (ou pacotes básicos), que são instalados juntamente com o programa. Estes pacotes básicos são: ‘base’, ‘utils’, ‘datasets’. ‘Grdevices’, ‘graphics’, ‘stats’, e ‘methods’. Existem muitos pacotes disponíveis, sendo que a maioria deles precisa ser instalada separadamente. Uma lista completa de pacotes disponíveis pode ser acessada em https://cran.r- project.org/web/packages/available_packages_by_name.html. Para instalar pacotes no RStudio, basta você acessar a aba Tools e, em seguida, Install Packages. Digite o pacote que deseja baixar (por exemplo, o pacote ‘vegan’) e depois que o download terminar carregue o pacote usando o comando library: digite library(vegan) na janela script do RStudio. https://cran.r-project.org/web/packages/available_packages_by_name.html https://cran.r-project.org/web/packages/available_packages_by_name.html 6 Para citar um pacote basta usar o comando citation, como por exemplo, citation("vegan"). 1.5. Obtendo ajuda O R possui um número muito grande de comandos, o que torna quase impossível memorizar todos eles. Portanto, a ajuda do R pode ser útil quando se deseja saber qual comando usar e como usá-lo. Na aba Help, no canto inferior direito no RStudio, basta digitar a palavra-chave de interesse ao lado da “lupa”, e o programa listará todos os comandos (em pacotes instalados) que contenham essa palavra. Note que os comandos no RStudio são “autocompletáveis”, isto quer dizer que basta digitar as três primeiras letras para o programa indicar todos os comandos que contenham a palavra-chave pesquisada. De maneira geral, a ajuda dos comandos inclui uma descrição (Description); uma explicação de como usar o comando (Usage); detalhes sobre os argumentos (Arguments); detalhes que sejam importantes para o entendimento do comando e, ou, de seus argumentos (Details); uma descrição do resultado esperado (Value); a lista com as referências bibliográficas relacionadas ao comando (References); sugestões de comandos relacionados ou similares ao comando que está sendo exibido (See Also); e exemplos de como utilizar o comando (Examples). Na página do projeto R (https://www.r-project.org/), na seção documentation há manuais, questões frequentemente perguntadas (FAQs) e livros relacionados. Existe também um fórum online sobre programação (Stack Overflow), onde é possível obter ajuda com questões relacionadas ao R (https://stackoverflow.com/questions/tagged/r). Além disso, existem listas de discussão (Mailing Lists; https://www.r-project.org/mail.html) que podem ser acessadas para dúvidas específicas. 1.6. Comandos e argumentos básicos https://www.r-project.org/ https://stackoverflow.com/questions/tagged/r https://www.r-project.org/mail.html 7 O R é feito de inúmeras funções agrupadas em pacotes, conforme mencionado anteriormente. Essas funções são executadas pelos seus respectivos nomes, seguido de parênteses (). As funções possuem argumentos que definem como elas serão executadas. Os argumentos são definidos usando o sinal de igualdade (=) e separados uns dos outros por vírgula, como por exemplo, (from = 1, to = 10, by = 2). Algumas funções possuem valores já definidos como padrão (default) para determinados argumentos. A função citation, por exemplo, usado para aprender como citar o R ou um pacote específico, tem o primeiro argumento package, definido como base. Assim, se você digitar apenas citation, o R mostrará como citar o pacote base, ou seja, como citar o R. Caso você queira saber como citar, por exemplo, o pacote boot, deve-se definir isso explicitamente com citation(package= "boot") ou apenas citation("boot"). A tabela abaixo mostra alguns símbolos e comandos básicos do R. Ação de ajuda Comando *Faz com que o R ignore o que será # digitado Separa dois comandos em uma ; mesma linha Dado ausente NA **Concatenar valores c() * Tudo que for digitado após o símbolo # na mesma linha de comando será ignorado pelo programa. Este recurso é muito útil para especificar detalhes importantes da função. ** Esse argumento cria um vetor com números ou caracteres. É importante notar que a vírgula (,) separa elementos, como os números dentro do comando c, enquanto o ponto (.) separa decimais (p.ex., 3.141593). 8 1.7. Estrutura de dados Os dados de um objeto podem ser organizados em diferentes estruturas de dados no R: vector (dados em uma dimensão), matrix (dados com duas dimensões), array (pode conter um vetor, duas matrizes ou mais dimensões), factor (vetor que representa dados categóricos), data.frame (parecido com matriz, mas permite colunas de diferentes tipos em um mesmo objeto) e list (objeto que permite combinar diferentes estruturas de dados em um único objeto). Os principais tipos de objetos encontrados no R são character (textos ou caracteres), numeric (números inteiros ou reais), logical (verdadeiro ou falso) e complex (números complexos). 1.7.1. Vetor A maneira mais simples de criar um vetor é usando o comando c, que concatena elementos em um mesmo objeto. Exemplo Vamos usar o comando c para criar um vetor numérico em uma sequência de 10 e nomeá-lo como X. X<-c(10, 20, 30, 40, 50) X # visualizar o vetor X Os elementos de c podem ser numéricos, categóricos ou mistos (categóricos e numéricos). Os comandos LETTERS e letters geram vetores com letras maiúsculas e minúsculas, respectivamente. LETTERS[1:10] # criar uma sequencia de letras maiusculas 9 letters[20:1] # letras minusculas e sequencia decrescente O comando rep retorna o primeiro argumento repetindo o número de vezes indicado pelo segundo argumento (times): rep(5, 10) # criando uma repeticao simples rep(c(1,2), 5) # criando uma repeticao para dois ou mais numeros c(rep(0,10), rep(1,5)) # concatenando repeticoes Os elementos armazenados em um vetor podem ser acessados com o uso de colchetes []. X<-10:1 # criar uma sequencia de 10 a 1 de nome X X # mostrar sequencia X X[4] # mostrar apenas o quarto elemento de X X[5:7] # mostrar do quinto ao setimo elemento X[c(1,5)] # mostrar primeiro e quinto elementos 1.7.2. Matriz O comando matrix recebe um vetor como argumento e o transforma em uma matriz de acordo com as dimensões especificadas. Exemplo Y<-1:15 # criar uma sequencia de 1 a 15 de nome Y mat<-matrix(Y, ncol=3) # gerar uma matriz (mat) com tres colunas para a sequencia Y mat # visualizar a matriz xmat2<-matrix(Y, nrow=3) # gerar uma matriz (xmat2) com três linhas para Y xmat2 # visualizar a matriz 10 Note que as matrizes são preenchidas ao longo das colunas. Para que a matriz seja preenchida por linhas deve-se alterar o argumento byrow para true (byrow =T). x1<-1:12 # criar uma sequencia (x1) de 1 a 12 matrix(x1, ncol=3, byrow = T) # preencher matriz por linhas matrix(x1, nrow=3, ncol=4) # preencher matriz com tres linhas e quatro colunas O comando dim mostra a dimensão de uma matriz e o comando summary pode ser usado para obter informações de uma matriz. Esse comando opera nas linhas da matriz como se cada uma delas fosse um vetor, calculando algumas estatísticas descritivas. x2<-matrix(1:20, ncol=4) # criar uma matriz (x2) com uma sequencia de 1 a 20 e quatro colunas summary(x2) # gerar estatisticas descritivas para cada uma das quatro colunas Para obter um resumo de todos os elementos da matriz, basta transformá-la em um vetor antes de usar o comando summary. summary(as.vector(x2)) # gerar estatisticas descritivas para toda a matriz Os comandos cbind e rbind também podem ser utilizados para construir matrizes. Eles concatenam colunas ou linhas, respectivamente, na matriz ou vetor original. x3<-matrix(10:1, ncol=2) # criar uma matriz (x3) de 1 a 10 em ordem decrescente e com duas colunas x3 # exibir matriz y1<-cbind(x3, 1:5) # adicionar uma terceira coluna em x3 11 y1 y1<-rbind(y1, c(5,10,15))# adicionar uma nova linha com os valores 5, 10 e 15 y1 1.7.3. Fator Fator é um vetor representado por elementos categóricos, organizados em diferentes níveis ou categorias. Uma variável qualitativa (categórica) pode ser do tipo nominal quando não há ordenação entre as categorias (p.ex., masculino/feminino; angiosperma/gimnosperma) e do tipo ordinal quando há ordenação entre categorias (p.ex., intensidade fraca/moderada/forte). Um vetor categórico pode ser criado com a função factor. Exemplo sexo<-factor(c("M","M","M","F","F","F"))# masculino e feminino (2 niveis) sexo manejo<-factor(c("0","0","1","1")) # potreiro com gado (1) e sem gado (0) manejo 1.7.4. Data.frame Os data.frames são semelhantes às matrizes. A principal diferença é que eles podem conter colunas com “elementos numéricos” e “categóricos”. Os data.frames são muito utilizados em análise de dados no R. Exemplo 12 Vamos preparar um data.frame da tabela abaixo, criando cada uma das colunas e juntando-as posteriormente. Tabela 1. Exemplo de dados que podem ser representados como data.frame. Número de indivíduos (NI), síndrome de dispersão (autocoria, zoocoria, hidrocória) e categoria sucessional (secundária inicial, pioneira) para cinco espécies arbóreas. Especies NI Dispersao Sucessao Sebastiania commersoniana 330 Auto Sin Allophylus edulis 116 Zoo Sin Eugenia uniflora 96 Zoo Sin Pouteria salicifolia 79 Hidro Pio Erythrina cristagalli 11 Auto Sin ## Criar tabela no R Especies<-c("Sebastiania commersoniana", "Allophylus edulis", "Eugenia uniflora", "Pouteria salicifolia", "Erythrina cristagalli") # gerar o vetor de caracteres chamado ‘Especies’ Especies NI<-c(330,116,96,79,11) # gerar o vetor numerico ‘NI’ NI Dispersao<-c("Auto","Zoo", "Zoo", "Hidro", "Auto")# gerar o vetor categorico ‘Dispersao’ Dispersao Sucessao<-c("Sin","Sin","Sin","Pio","Sin")# gerar o vetor categorico ‘Sucessao’ Sucessao 13 Agora que cada um dos vetores que compõem as colunas da Tabela 1 foi criado, nós podemos reunir todos eles em um objeto data.frame. tabela<-data.frame(Especies,NI, Dispersao, Sucessao) Adicione uma nova coluna no data.frame usando o comando cbind(). Essa nova coluna representa o valor de importância (VI) das espécies da tabela abaixo, cujos valores são 31.93, 13.48, 10.67, 10.20, 7.54, respectivamente. tabela<-cbind(tabela, VI=c("31.93", "13.48", "10.67", "10.20", "7.54"))# adicionar uma coluna tabela Usando colchetes [linhas, colunas], nós podemos selecionar (extrair) os dados de interesse de uma matriz ou de um data.frame. Basta indicar as linhas e colunas de interesse. tabela [,1] # extrair a primeira coluna e todas as linhas tabela[1,] # extrair a primeira linha e todas as colunas tabela[3,3] # extrair a terceira linha e a terceira coluna tabela[1,3] # extrair o valor da primeira linha e terceira coluna tabela[c(1:5),c(2,3)] # extrais somente as linhas 1 a 5 e as colunas 2 e 3 Outra forma de acessar colunas pelo nome é usar o comando cifrão $(). tabela$NI # extrai a segunda coluna 1.8. Abrir e salvar dados no R 14 Tabelas de dados de diversos programas podem ser importadas diretamente para o R e RStudio através de funções como read.table para arquivos de texto com “extensão txt” e read.csv para arquivos com “extensão csv”. Exemplo Na aba superior do RStudio clique em Session – Set Working Directory – Choose Directory para definir a pasta no computador onde se encontram os dados. dados<- read.table("dados.txt", header = TRUE, sep = "", dec = ".") # abrir tabela de dados (extensao txt) a partir de uma pasta do computador Argumentos "dados.txt": nome do arquivo dentro do diretorio de dados do computador header = TRUE: significa que a primeira linha do arquivo deve ser interpretada como o nome das colunas sep = : o separador de colunas pode ser "" para espaços,"\t" para tabulacao e ";" ou "," para csv dec = : separador de decimais: dec = "." para ponto e dec = "," para virgula O R permite exportar conjuntos de dados da área de trabalho para os formatos de arquivo CSV e txt. Para exportar um conjunto de dados para um arquivo CSV use o comando write.csv. write.csv(nome_do_arquivo_entrada, "nome_do_arquivo_de_saida.csv", row.names=FALSE) Para exportar um conjunto de dados para um arquivo txt, use a função write.table. 15 write.table(nome_do_arquivo_entrada, "nome_do_arquivo_de_saida.txt", row.names=F) 2. Conceitos-chave em análise multivariada Amostra: Um subconjunto da população de interesse. Como é praticamente impossível observar ou manipular todos os indivíduos em uma população, as análises se baseiam em amostras da população. A probabilidade e a estatística são utilizadas para extrapolar os resultados a partir de uma amostra pequena para uma população maior. Análise de agrupamento (cluster analysis): Um método para agrupar objetos com base em distâncias multivariadas entre eles. Essas distâncias medem a similaridade/dissimilaridade entre objetos. Análise multivariada: Método estatístico que avalia como múltiplas variáveis respostas (Y) – dados multivariados – estão relacionadas de maneira simultânea com uma ou mais variáveis preditoras (X). Bootstrap: A palavra bootstrap significa “meios para conseguir algo com seu próprio esforço, sem ajuda de mais ninguém”. Na estatística, bootstrap é um procedimento de aleatorização (ou Monte Carlo), no qual as observações em um conjunto de dados são reamostradas com reposição a partir do conjunto de dados original, e o conjunto de dados reamostrado é então usado para recalcular a estatística teste de interesse. Isto é repetido um grande número de vezes (em geral 1000 a 10000 ou mais). A estatística teste que foi calculada com o conjunto de dados original é comparada com a distribuição daquela resultante das repetidas reamostragens dos dados, para obter um valor de probabilidade (P) exato. 16 Centroide: O vetor médio de uma variável multivariada. Pense nele como o centro de uma nuvem de pontos no espaço multivariado, ou o ponto em que você poderia equilibrar essa nuvem de pontos na ponta de uma agulha. Correlação: Um método estatístico usado para explorar relações entre duas variáveis. Na análise de correlação, nenhuma hipótese sobre relação de causa e efeito é assumida. Dados métricos ou quantitativos: Dados numéricos que descrevem quantias ou graus de um atributo (p.ex., peso, idade). Dados não-métricos ou qualitativos: Dados qualitativos que descrevem características ou propriedades categóricas de um atributo. Dados qualitativos nominais não apresentam ordem (p.ex., sexo, cor do olho) e dados qualitativos ordinais apresentam ordem (p.ex., escolaridade, estações do ano). Distância multivariada: Uma distância multivariada mede o “quão separados dois objetos estão” em um espaço multidimensional. Em linhas gerais, distâncias medem quão iguais dois objetos são (similaridade) ou quão diferentes dois objetos são (dissimilaridade). Há muitas formas para medir distâncias, a mais familiar é a distância euclidiana, que mede dissimilaridade. Distribuição normal: Distribuição contínua de probabilidades puramente teórica na qual o eixo horizontal representa todos os valores possíveis de uma variável e o eixo vertical representa à probabilidade de esses valores ocorrerem. Os valores probabilísticos sobre a variável estão agrupados em torno da média em um padrão simétrico, unimodal, conhecido como curva normal (curva em forma de sino). Erro Tipo I: Probabilidade de rejeitar incorretamente a hipótese nula – na maioria dos casos, isso significa dizer que existe uma diferença ou correlação significativa quando na verdade não é o caso. Também chamado de alfa (α). Níveis comuns são 5 ou 1%, chamados de nível 0,05 ou 0,01, respectivamente. Erro Tipo II: Probabilidade de falhar incorretamente na rejeição da hipótese nula – em termos simples, a probabilidade de não encontrar uma diferença ou 17 correlação significativa quando ela existe. Também chamado de beta (β), está inversamente relacionado ao Erro Tipo I. O valor 1 menos o Erro Tipo II é definido como poder. Esfericidade: A premissa dos métodos de teste de hipóteses multivariado de que a covariâncias de cada grupo são iguais umas às outras. Hipótese: Uma afirmação testável de causa e efeito. Estatística não paramétrica: Um ramo da análise estatística que não depende dos dados terem sido tirados de uma variável aleatória definida e com distribuição de probabilidade conhecida (p. ex., distribuição normal). É frequentemente substituída por análises Monte Carlo. Hipótese alternativa: A hipótese de interesse no teste de hipóteses. Ela é a hipótese estatística que corresponde à questão que está sendo examinada com os dados. Diferente da hipótese nula, a hipótese alternativa diz que “algo está acontecendo”. Hipótese nula: A hipótese estatística formal de que não existe relação matemática entre duas variáveis, ou a forma estatística da hipótese científica de que qualquer variabilidade observada nos dados pode ser atribuída inteiramente à aleatoriedade ou a erros de medida. Heterocedástico: A propriedade de um conjunto de dados que diz que a variância residual de todos os grupos de tratamentos são diferentes. Homocedástico: A propriedade de um conjunto de dados cuja variância residual de todos os grupos de tratamento é igual. Linearidade: Usado para expressar o conceito de o modelo possuir as propriedades de aditividade e homogeneidade. Em termos gerais, os modelos lineares preveem valores que recaem em uma linha reta que tem uma mudança com unidade constante (coeficiente angular) da variável dependente em relação a uma mudança com unidade constante da variável independente. 18 Multicolinearidade: Extensão em que uma variável pode ser explicada pelas outras variáveis na análise. À medida que a multicolinearidade aumenta, fica mais complicada a interpretação da “variável estatística”, uma vez que se torna mais difícil verificar o efeito de qualquer variável devido as suas inter-relações. Poder da análise: Probabilidade de rejeitar corretamente a hipótese nula quando a mesma é falsa, ou seja, de encontrar corretamente um suposta relação entre variáveis quando de fato ela existe. Determinado como uma função (1) do nível de significância estatística (α) dado pelo pesquisador para um Erro Tipo I (p.ex., P ≤ 0,05), (2) do tamanho da amostra utilizada na análise, e (3) do tamanho do efeito examinado. Resíduo: Parte de uma variável dependente não explicada por uma técnica multivariada. Associada a métodos de dependência que tentam prever a variável dependente, o resíduo representa a parte inexplicada da mesma. Os resíduos podem ser usados em procedimentos diagnósticos para identificar problemas na técnica de estimação ou para identificar relações não especificadas. Significância prática: Método de avaliar resultados da análise multivariada baseado em suas descobertas substanciais, em vez de sua significância estatística. Enquanto a significância estatística determina se o resultado pode ser atribuído ao acaso, a significância prática avalia se o resultado é útil. Tamanho do efeito: Estimativa do grau em que o fenômeno estudado (p.ex., correlação ou diferença em médias) existe na população estudada. Técnica de dependência: Classificação de técnicas estatísticas onde o objetivo é a previsão da(s) variável(eis) resposta(s) pela(s) variável(eis) preditoras (p.ex., análise de regressão). Técnica de interdependência: Classificação de técnicas estatísticas nas quais as variáveis não são divididas em resposta (Y) e preditora (X), sendo todas as variáveis analisadas como um único conjunto. 19 Tratamento: Variável preditora que o pesquisador manipula para avaliar o efeito sobre a(s) variável(eis) resposta(s), como em um experimento. Variável estatística: Combinação linear de variáveis formada na técnica multivariada determinando-se pesos empíricos aplicados a um conjunto de variáveis especificado pelo pesquisador. Variável resposta (ou variável dependente): Em uma declaração de causa e efeito, a variável resposta (Y), ou o objeto afetado a partir do qual se deseja determinar a causa (X). Em outras palavras, é o efeito hipotético de um fator causal. Variável preditora, explanatória (ou variável independente): Em uma declaração de causa e efeito, é a variável preditora, ou o objeto que é postulado como o causador do efeito observado. Em outras palavras, é o fator hipotético de causa. 3. Distâncias multivariadas “O primeiro passo de muitas análises multivariadas, como veremos nessa disciplina, é calcular uma matriz de distâncias (similaridades/dissimilaridades) entre um conjunto de itens em um espaço multidimensional”. Matrizes de distâncias podem ser calculadas para as linhas (p.ex., unidades amostrais) ou colunas (p.ex., espécies ou variáveis ambientais) da matriz de dados, usando-se tanto dados quantitativos quanto binários (0/1). Em linhas gerais, distâncias medem “quão iguais” dois itens (ou objetos) são (similaridade) ou “quão diferentes” dois itens são (dissimilaridade). Há muitas formas para medir distâncias, a mais familiar é a distância euclidiana, que mede dissimilaridade. Essas distâncias podem ser categorizadas 20 como métricas, semi-métricas e não-métricas. As distâncias métricas têm quatro propriedades fundamentais: 1. Se dois objetos são “idênticos”, a distância entre eles é zero. 2. Se dois objetos são “diferentes”, a sua distância é maior que zero. 3. Distâncias são simétricas (ou seja, a distância entre os objetos A–B ou B– A é a mesma). 4. A distância mais curta entre dois pontos (p.ex., locais) é uma “linha” e você não pode melhorar passando por outros pontos. Em relação à propriedade 4, “uma distância métrica satisfaz a desigualdade triangular”. Assim, com três objetos, a distância entre dois destes não pode ser maior que a soma das duas outras distâncias. Por exemplo, a distância entre A–B não pode ser maior que a soma das distâncias entre A–C e B–C. É muito importante ressaltar que somente a “distância euclidiana” e algumas poucas distâncias correlatas satisfazem todas as 4 propriedades. Distâncias semi- métricas, como “Bray-Curtis”, apesar de muito populares, podem violar a desigualdade triangular (propriedade 4). Distâncias não-métricas violam uma ou mais dessas propriedades e, portanto, são pouco usadas na área ambiental. 3.1. Distância euclidiana No mundo da matemática, a distância mais curta entre dois pontos (y, x) em qualquer dimensão é chamada de distância euclidiana, que é baseada no “teorema de Pitágoras”. É a raiz quadrada da soma dos quadrados da diferença entre dois pontos. 21 Apesar de ser a medida de distância (dissimilaridade) mais usada na análise multivariada, ela pode gerar “resultados contraintuitivos com dados brutos”. Exemplo Para ilustrar como distâncias euclidianas podem gerar resultados contraintuitivos, nós apelamos para um “exemplo clássico” de livros-texto de estatística (p.ex., Orlóci, 1978; Gotelli & Ellison, 2004). Esse exemplo é baseado em dados hipotéticos (Orlóci, 1978) para três espécies y1, y2, e y3 em três locais x1, x2, e x3, conforme tabela abaixo: Tabela2. local × espécies Local y1 y2 y3 x1 0 1 1 x2 1 0 0 x3 0 4 4 Os valores são os números de indivíduos para cada espécie y no local x Paradoxo: Notem que os locais x1 e x2 não têm “espécies em comum”, e a distância euclidiana entre eles é 1,732, enquanto que os locais x1 e x3 têm todas suas espécies em comum (y2, y3), mas a distância entre eles é 4,243. Na vida real, é esperado exatamente o contrário! Evidentemente, os locais x1 e x2 são mais diferentes do que os locais x1 e x3, simplesmente porque “x1 e x2 não compartilham espécies em comum”. dx1, x2 = sqrt (1 – 0)2 + (1 – 0)2 + (1 – 0)2 = 1,732 dx1, x3 = sqrt (0 – 0)2 + (1 – 4)2 + (1 – 4)2 = 4,243 sqrt = raiz quadrada (square root) Felizmente, esse problema pode ser resolvido com a transformação de dados brutos. “Portanto, a distância euclidiana deve ser usada preferencialmente com 22 dados transformados”. Existem duas transformações muito úteis para “dados de contagem”, a transformação de corda e a transformação de Hellinger. Distâncias euclidianas com dados transformados em corda e Hellinger são denominadas como distância de corda (chord distance) e distância de Hellinger (Hellinger distance), respectivamente. Qual distância escolher? Hellinger ou corda? Na vida real, essas distâncias produzem resultados “altamente redundantes”, simplesmente porque são distâncias euclidianas e os dados são submetidos à transformações matemáticas similares. A transformação de corda divide cada valor de uma matriz de dados pela raiz quadrada da soma dos quadrados marginais (ou seja, valores são transformados nas linhas da matriz). Enquanto, a transformação de Hellinger divide cada valor de uma matriz de dados pela soma da linha (totais) correspondente e logo após padroniza o valor resultante pela sua raiz quadrada. Agora vamos visualizar no R as “vantagens reais” de usar distâncias euclidianas com dados transformados. Mãos à obra! ## Reproduzir a tabela 2 no R (locais nas linhas e especies nas colunas) y1<-c(0,1,0) # especie1 y2<-c(1,0,4) # especie2 y3<-c(1,0,4) # especie3 dados<-data.frame(y1, y2, y3) # reunir vetores em uma tabela e nomear como “dados” dados # Visualizar tabela ## Carregar pacote vegan no R library(vegan) ## Calcular distancias euclidianas, distancias de corda e distancias de Hellinger usando as funções ‘vegdist’ e ‘decostand’ do pacote ‘vegan’ 23 ## Calcular distancias euclidianas euc <-vegdist(dados, "euclidean") ## Calcular distancias de corda chord <-vegdist(decostand(dados, "norm"), "euclidean") ## Calcular distancias de Hellinger hell <-vegdist(decostand(dados, "hell"), "euclidean") ## Visualizar as matrizes de distancias euc # matriz de distancia euclidianas chord # matriz de distancias de corda hell # matriz de distancias de Hellinger Agora vamos comparar as distâncias geradas no R! Lembrem-se que as distâncias de corda e de Hellinger são distâncias euclidianas com dados transformados. Vejam que as distâncias de corda e Hellinger entre os locais x1 e x3 são zero porque ambos locais compartilham as mesmas espécies, enquanto que as distâncias entre os locais x1 e x2 são 1,414214 porque ambos locais não compartilham espécies em comum. > euc 1 2 2 1.732051 3 4.242641 5.744563 > chord 1 2 2 1.414214 3 0.000000 1.414214 > hell 1 2 2 1.414214 3 0.000000 1.414214 É importante mencionar que as distâncias de corda e Hellinger atingem um limite máximo de sqrt(2) = 1,414214 quando não há espécies compartilhadas entre dois locais. Entendeu agora porque as distâncias entre os locais x1 e x2 e x2 e x3 foram 1,414214?. > sqrt(2) [1] 1.414214 24 3.2. Medidas de distância no R Existem muitas medidas de distância (dissimilaridade) disponíveis no R. A função vegdist do pacote ‘vegan’ é suficiente para lhe fornecer uma visão geral sobre as medidas mais populares na área ambiental (clique em Help e digite vegdist na lupa do RStudio). Você também pode usar a função designdist do vegan para definir suas próprias escolhas. Outras funções disponíveis no R são: a função nativa dist (‘base’), daisy (‘cluster’) e dsvdis (‘labdsv’). Qual medida escolher? Primeiro, vai depender da “natureza dos dados”, ou seja, se eles são quantitativos (discretos ou contínuos), binários (0/1), qualitativos (nominais ou ordinais) ou mistos (quantitativos e qualitativos). Segundo, vai depender, entre outras coisas, se a medida escolhida satisfaz as propriedades mencionadas anteriormente. Atenção! Lembrem-se que algumas medidas (índices) no R não calculam distâncias para linhas vazias (“empty rows”) da matriz. Então, certifiquem-se de inspecionar os dados antes de começar! Exemplo 1 (dados quantitativos contínuos) Vamos considerar dados de precipitação média (mm) para as estações do ano em cinco cidades. Vamos calcular distâncias euclidianas para detectar diferenças tanto “entre cidades” como “entre estações do ano”. Aqui não será necessário “transformar os dados” porque esses dados não contém “valores discrepantes” (outliers) e “muitos zeros”. ## Criar matriz com os dados de precipitacao media (mm) por estacao do ano em cinco cidades. Os vetores sao criados com o comando ‘c’ e agrupados com o comando ‘data.frame’ verao<-c(380, 277, 391, 434, 362) outono<-c(421, 320, 390, 353, 384) 25 inverno<-c(339, 334, 420, 349, 433) primavera<-c(435, 333, 396, 410, 411) estacoes<-data.frame(verao, outono, inverno, primavera) ## Visualizar matriz de dados (tabela) estacoes ## Carregar pacote vegan library(vegan) ## Calcular distancias euclidianas entre cidades vegdist(estacoes, "euc") # distancias são calculadas para as linhas ## Calcular distancias euclidianas entre estacoes. Note que agora vamos ‘transpor’ a matriz para as estacoes ficarem nas linhas. A transposicao de uma matriz e feita com o comando ‘t’ estacoes.linhas<-t(estacoes) estacoes.linhas vegdist(estacoes.linhas, "euc") Exemplo 2 (dados binários) Vamos considerar dados de presença e ausência (binários 0/1) de 4 espécies de plantas em 3 locais. Vamos usar o índice de dissimilaridade de Jaccard. Para tal, vamos usar o argumento binary=TRUE na função vegdist para calcular distâncias de Jaccard para dados binários. O índice de dissimilaridade de Jaccard pode ser descrito pela seguinte equação: d = A + B – 2J / A + B – J, onde “A” é o número de objetos (p.ex., espécies) que ocorre apenas na “amostra 1”, “B” é o número de objetos que ocorre apenas na “amostra 2” e “C” é o número de objetos que ocorre em ambas. 26 Assim, esse índice leva em conta os objetos “exclusivos” e “compartilhados” entre duas amostras (p.ex., locais). ## Criar matriz com os dados de presença/ausencia de 4 especies em 3 locais sp.1<-c(1,0,0) sp.2<-c(0,0,0) sp.3<-c(1,1,1) sp.4<-c(1,0,1) especies<-data.frame(sp.1,sp.2,sp.3,sp.4) especies ## Carregar pacote vegan library(vegan) ## Calcular distancias de Jaccard entre locais vegdist(especies, "jaccard", binary=TRUE) Exemplo 3 (dados mistos, distância de Gower) Vamos considerar dados hipotéticos sobre o estado de conservação de 8 espécies. A variável “status” é “categórica ordinal”: 0 = Menos preocupante, 1 = Quase ameaçado, 2 = Vulnerável, 3 = Em perigo, 4 = Criticamente em perigo. A variável “legislação” é “binária”: 0 = Não protegido, 1 = Protegido. A variável distribuição (área de ocupação em km2) é “numérica contínua”. Vamos usar a função daisy do pacote ‘cluster’ para calcular a distância de Gower, que é adequada para dados mistos. ## Instalar pacote cluster no RStudio tools -> Install Packages -> digite cluster ## Carregar pacote cluster library(cluster) ## Criar matriz de dados (3 variaveis × 8 especies) status<-c(1, 0, 1, 4, 3, 0, 4, 1) 27 legislacao<-c(0, 1, 0, 0, 0, 1, 1, 0) distribuicao<-c(85, 200, 342, 16, 45, 123, 8, 42) dados<-data.frame(status, legislacao, distribuicao) ## Calcular distancias de Gower para a especies daisy(dados, "gower") Exercício 1 (comparando distâncias) Considere os dados hipotéticos abaixo sobre a abundância (número de indivíduos) de 4 espécies em 5 locais. Calcule a distância euclidiana, distância de Bray-Curtis e distância de Hellinger para esses dados usando a função vegdist do pacote ‘vegan’. Note que você precisa indicar a distância a ser usada dentro da função, como por exemplo, vegdist("bray") ou vegdist("euc"). Tabela 3. Locais × espécies Locais sp1 sp2 sp3 sp4 1 0 243 1 0 2 123 1 0 0 3 40 0 145 78 4 0 0 0 2 5 0 321 0 0 Qual(ais) a(s) distância(s) que melhor descreve(m) as diferenças na composição e abundância de espécies entre locais? Qual é a redundância entre essas distâncias em termos de informação? Vamos usar a função mantel do pacote ‘vegan’ – mantel(dist1, dist2, permutations = 9999) – para medir a redundância entre as medidas de distâncias (euc, bray, hell). Note que o teste de Mantel é simplesmente uma correlação entre duas matrizes de distâncias com as mesmas dimensões. Os resultados do teste variaram de 0 a 1. Quanto mais próximo de 1 o valor do teste, maior a semelhança (correlação) entre as medidas. 4. Relação entre matrizes de distância 28 Em pesquisa científica, é comum que o pesquisador colete várias informações (variáveis) para uma mesma unidade amostral ou experimental, no campo ou laboratório. “Como essas observações são coletadas nas mesmas unidades, elas “não são independentes entre si”. É justamente por isso que as análises multivariadas baseadas em distância foram desenvolvidas, uma vez que dados multivariados violam a “suposição de independência amostral” dos testes univariados e bivariados tradicionais (p.ex., Anova, regressão). As matrizes de distância podem ser de diferentes tipos, como por exemplo, distâncias genéticas entre linhagens, distâncias ecológicas (abundância e composição de espécies), distâncias ambientais (p.ex., clima, solo, vegetação) e distâncias geográficas (coordenadas xy ou UTM). Para testar relações entre matrizes de distância, geralmente nós usamos o teste de Mantel e o correlograma de Mantel. O teste de Mantel avalia a correlação entre duas matrizes de distância. É não paramétrico e calcula a significância (P) da correlação por meio de permutações das linhas e colunas de uma das matrizes de distância de entrada (não importa qual matriz). A estatística de teste é o coeficiente de correlação de Pearson r. Esse coeficiente r varia de –1 a +1, onde –1 indica forte correlação negativa, +1 indica forte correlação positiva e 0 indica ausência de correlação. O correlograma de Mantel testa se há correlação entre duas matrizes de distância medindo a correlação entre cada classe de distância. O correlograma de Mantel realiza um teste de Mantel para cada classe de distância e gera um correlograma com as classes de distância no eixo x e sua estatística de teste de Mantel correspondente no eixo y. A forma do correlograma pode então ser analisada para determinar a estrutura correlativa subjacente que existe entre as duas matrizes de distância. O correlograma de Mantel é normalmente usado como um método auxiliar ao teste de Mantel tradicional. Assim, o teste de 29 Mantel é usado para verificar a correlação geral (global correlation) entre duas matrizes de distância, e o correlograma de Mantel pode então ser usado para investigar a estrutura subjacente da relação correlativa. Exemplo Para exemplificar o uso do teste de Mantel e do correlograma de Mantel, nós vamos usar dados de contagens de árvores e variáveis ambientais em 50 parcelas de 1 hectare na ilha Barro Colorado, República do Panamá (https://rdrr.io/cran/vegan/man/BCI.html), provavelmente a floresta tropical mais estudada no mundo. ## Abrir matriz ‘BCI’ – 50 parcelas/1ha (linhas) com a abundancia de um total de 225 especies arboreas (colunas) library(vegan) data(BCI) # Abrir matriz ‘BCI.env’ - 9 variaveis (colunas) para 50 parcelas (linhas) data(BCI.env) ## Calcular distancias de Hellinger para BCI BCI.hell<-vegdist(decostand(BCI, "hell"),"euc") ## Calcular distancias euclidianas para as coordenadas geograficas das parcelas (as duas primeiras colunas de BCI.env) BCI.xy<-BCI.env[1:2] # selecionar as duas primeiras colunas e nomear como BCI.xy BCI.xy.euc<-vegdist(BCI.xy, "euc") # calcular distancias euclidianas para as coordenadas ## Calcular o teste de Mantel entre matrizes options(scipen=999)# desativar notacao cientifica https://rdrr.io/cran/vegan/man/BCI.html https://rdrr.io/cran/vegan/man/BCI.html https://rdrr.io/r/utils/data.html https://rdrr.io/cran/vegan/man/BCI.html https://rdrr.io/cran/vegan/man/BCI.html https://rdrr.io/r/utils/data.html https://rdrr.io/cran/vegan/man/BCI.html https://rdrr.io/cran/vegan/man/BCI.html 30 mantel<-mantel(BCI.hell, BCI.xy.euc, method="pearson", permutations=9999) ## Inspecionar valores do teste de permutacao perm <- permustats(mantel) summary(perm) ## Calcular o correlograma de Mantel entre matrizes CM<-mantel.correlog(BCI.hell, BCI.xy.euc, r.type="pearson", nperm=9999) CM plot(CM) 5. Classificação (análise de agrupamentos) A classificação é o processo através do qual agrupamos os objetos. O tipo mais familiar de classificação é a análise de agrupamentos (cluster analysis). Enquanto o objetivo da ordenação é separar as observações ou amostras ao longo de gradientes ambientais ou eixos biológicos, o objetivo da classificação é agrupar objetos similares em classes identificáveis e interpretáveis que podem ser distinguidas das classes vizinhas. A taxonomia é uma aplicação familiar da classificação – um taxonomista começa com uma coleção de espécimes e deve decidir como atribuí-los em espécies, gêneros, famílias e grupos taxonômicos superiores. O objetivo final é criar uma sistema de classificação inclusiva com base em grupos de agrupamentos hierárquicos. A análise de agrupamentos reúne um grupo de técnicas multivariadas cuja finalidade principal é agregar objetos com base nas características que eles possuem. Essa análise classifica objetos de modo que cada objeto é muito 31 semelhante a outros no agrupamento com base em um critério de seleção predeterminado. Os agrupamentos resultantes de objetos devem então exibir elevada homogeneidade interna (dentro dos agrupamentos) e elevada heterogeneidade externa (entre agrupamentos). Os métodos hierárquicos (algoritmos) mais usados para a determinação de agrupamentos são: (1) ligação simples (single linkage), (2) ligação completa (complete linkage), (3) ligação média (average linkage ou UPGMA), e (4) método de Ward (Ward's minimum variance). Existem outros algoritmos disponíveis no R. A função nativa hclust (pacote ‘stats’) apresenta alguns dos algoritmos mais usados (dê uma olhada no help da função!). Ligação simples: O algoritmo de ligação simples (ou vizinho mais próximo) define a “similaridade” como a “distância mínima” entre objetos. Ele encontra os dois objetos separados pela menor distância e os coloca no primeiro agrupamento. Em seguida, a próxima distância mais curta é determinada, e um terceiro objeto se junta aos dois primeiros para formar um agregado, ou um novo agrupamento de dois membros é formado. O processo continua até que todos os objetos similares formem um agrupamento ou agregado. Ligação completa: Esse algoritmo é semelhante ao algoritmo de ligação simples, exceto em que o critério de agrupamento se baseia em “distância máxima” entre objetos. Por essa razão, às vezes é chamado de abordagem do viznho mais distante ou de método do diâmetro. A distância máxima entre indivíduos em cada agregado representa a menor esfera (diâmetro mínimo) que pode incluir todos os objetos em ambos os agrupamentos. Esse método é chamado de ligação completa porque todos os objetos em um agrupamento são conectados um com o outro a alguma distância máxima ou similaridade mínima. Podemos dizer que a similaridade interna se iguala ao diâmetro do grupo. Ligação média: Esse algoritmo começa da mesma forma que os algoritmos anteriores, mas o critério de agrupamento é a “distância média” entre todos os 32 objetos em um agrupamento e todos os objetos de outro agrupamento. Esse algoritmo não depende de valores extremos (distâncias mínimas e máximas), e a partição é baseada em todos os elementos dos agregados, ao invés de um único par de membros extremos. Esse algoritmo tende a combinar agrupamentos com pequena variação interna e a produzir agrupamentos com aproximadamente a mesma variância. Método de Ward: Esse algoritmo define a “similaridade” como a “soma dos quadrados” entre dois agrupamentos (feita sobre todas as variáveis). Em cada estágio do procedimento de agrupamento, a soma interna de quadrados é minimizada sobre todas as partições (o conjunto completo de agrupamentos disjuntos ou separados) que podem ser obtidas pela combinação de dois agrupamentos do estágio anterior. Esse método tende a resultar em agrupamentos de tamanhos aproximadamente iguais devido à minimização de variação interna. 5.1. Seleção do algoritmo de agrupamento Existem diversas maneiras de fazer uma análise de agrupamentos, e os diferentes algoritmos em geral dão resultados diferentes. Portanto, é mais importante decidir um método de antemão em vez de tentar todos os diferentes métodos e escolher aquele que parecer o mais agradável ou que se conforme a noções preconcebidas. A primeira questão a fazer é: qual algoritmo de agrupamento devemos usar? Uma maneira eficiente de selecionar um algoritmo é considerar a sua correlação cofenética. A correlação cofenética para um dendrograma de agrupamentos é definida como o coeficiente de correlação linear entre as distâncias cofenéticas obtidas do dendrograma e as distâncias originais (“dissimilaridades”) usadas para construir 33 tal dendrograma. Portanto, é uma medida de quão fielmente o dendrograma representa as dissimilaridades originais entre as observações. Exemplo Vamos usar o conjunto de dados ‘dune’ do pacote ‘vegan’ para ilustrar o procedimento de seleção do algoritmo com base na correlação cofenética. Esses dados foram coletados como parte de um projeto focado no efeito do manejo sobre a vegetação de dunas na Holanda. O conjunto de dados contém 20 parcelas de 2 × 2 m2 (20 locais), e a cobertura (escala de Braun-Blanquet) de 30 espécies de plantas (28 plantas vasculares e 2 briófitas). Vamos usar a função nativa hclust (pacote ‘stats’) para efetuar análise hierárquica de agrupamentos com diferentes algoritmos. ## Carregar pacote vegan library(vegan) ## Abrir dados data(dune) ## Calcular distancias de corda (dissimilaridades) para a vegetacao de dunas na Holanda dune.dist<-vegdist(decostand(dune, "norm"),"euc") ## Algoritmo de ligacao simples (vizinho mais proximo) single <- hclust(dune.dist, "single") plot(single) # plotar dendrograma ## Algoritmo de ligacao completa (vizinho mais distante) complete <- hclust(dune.dist, "complete") plot(complete) ## Algoritmo de ligacao media average <- hclust(dune.dist, "average") plot(average) 34 ## Metodo de Ward ward <- hclust(dune.dist, "ward.D") plot(ward) ## Agrupar todos os 4 dendrogramas um uma unica janela par(mfrow=c(1,4))# definir 1 linha e 4 colunas plot(single) plot(complete) plot(average) plot(ward) ## Use par(mfrow=c(1,1)) para retornar ao modo padrao ## Calcular coeficiente de correlacao cofenetica entre as distancias cofeneticas do dendrograma e as dissimilaridades originais (distancias de corda). A matriz cofenetica que tiver a maior correlacao com a matriz de distancias originais pode ser considerada a mais adequada para classificar os dados cor(dune.dist, cophenetic(single)) cor(dune.dist, cophenetic(complete)) cor(dune.dist, cophenetic(average)) cor(dune.dist, cophenetic(ward)) ## Plotar ‘categorias’ no dendrograma. Vamos abrir o conjunto de dados ‘dune.env’ que contem 5 variaveis ambientais e usar as variaveis categoricas ‘manejo’ e ‘uso’ data(dune.env) par(mfrow=c(1,1)) plot(average, dune.env$Management) plot(average, dune.env$Use) 35 A função nativa rect.hclust (pacote ‘stats’) é útil para desenhar retângulos ao redor dos ramos de um dendrograma quando o objetivo é destacar os agrupamentos correspondentes. Primeiro o dendrograma é cortado em um determinado nível (usando o argumento k, que define o número de agrupamentos), e depois um retângulo é desenhado em torno dos ramos selecionados. plot(average, dune.env$Management) rect.hclust(average, k=4) A função nativa cutree (pacote ‘stats’) cria um vetor de classificação com o número de agrupamentos definidos com o argumento k. Esse vetor pode ser usado como uma variável fatorial, por exemplo, em análise de variância (Anova) ou ordenação. ## Criar vetor de classificacao agrupamentos <- cutree(average, k=4) ## Criar ordenacao com distancias de corda ord <-metaMDS(dune.dist) # ordenacao plot(ord, display = "sites") ## Adicionar os poligonos dos agrupamentos formados ordihull(ord, agrupamentos, lty = 2,draw = c("polygon"), col = "blue") Exercício Faça uma análise de agrupamentos com os dados ambientais da matriz ‘dune.env’ do pacote ‘vegan’. Note que os dados são mistos (quantitativos e categóricos). Use a função daisy do pacote ‘cluster’ para calcular distâncias de Gower para dados mistos: daisy(dune.env, metric = "gower"). Selecione o algoritmo que melhor descreve a classificação dos locais com base na distância cofenética. 36 6. Ordenação Ordenação, em sentido literal, é simplesmente “organizar” ou “ordenar” variáveis ao longo de eixos ou dimensões. Os pesquisadores da área ambiental usam a ordenação para (1) reduzir dados multivariados complexos para um número menor de variáveis-chave (dimensões), (2) ordenar conjuntos de espécies (p.ex., comunidades biológicas) com base em múltiplas variáveis de seus hábitats, e (3) identificar respostas das espécies aos gradientes ou perturbações ambientais. Quando usada com prudência, a ordenação pode ser uma ferramenta poderosa na exploração de dados, para ilustrar padrões e gerar hipóteses que possam ser testadas com amostragens ou experimentos subsequentes. Em ordenação, geralmente as variáveis são organizadas como uma maneira de resumir (graficamente) “relacionamentos complexos”, extraindo um ou poucos padrões dominantes de um número grande de padrões possíveis. Usada dessa maneira, a ordenação é simplesmente uma técnica de “redução de dados”. Por outro lado, a ordenação também pode ser usada para discriminar ou separar amostras ao longo de dimensões (ou seja, eixos de ordenação). Nesta apostila são apresentadas seis técnicas de ordenação populares na área ambiental. Esses tipos de ordenação estão disponíveis no pacote ‘vegan’ ou em pacotes nativos do R: (1) Análise de componentes principais (rda ou função nativa prcomp), (2) Análise de coordenadas principais (função nativa cmdscale), (3) Escalonamento multidimensional não-métrico (função metaMDS), (4) Análise de redundância (rda), (5) Análise de redundância baseada em distância (capscale e dbrda), e (6) Análise de correspondência canônica (cca). 37 6.1. Análise de componentes principais (principal component analysis, PCA) Um método de ordenação que reduz a dimensionalidade de dados multivariados pela criação de combinações lineares das variáveis originais. A PCA é a técnica mais usada para reduzir um grande número de variáveis originais “correlacionadas” para um pequeno número de “variáveis-chave” (os “componentes principais”) e “não correlacionadas”. Esses componentes são combinações lineares das variáveis originais, e caracterizam o máximo possível a variação dessas variáveis originais. Esta técnica é eficiente para reduzir um conjunto de variáveis correlacionadas quando a distância euclidiana é apropriada e quando não há presença de dados discrepantes (outliers) ou dados muito assimétricos. Existem várias funções para calcular PCA no R. Nós utilizaremos a função nativa prcomp. Dois tipos de PCA podem ser calculadas: PCA baseada em covariância e a PCA baseada em correlação. “Devemos usar a PCA baseada em correlação quando as variáveis têm unidades de medida diferentes ou quando a variância é muito diferente entre elas”. Na PCA de correlação, os dados são padronizados para ter média 0 e desvio padrão 1 (Z-scores). Exemplo Para ilustrar a aplicação da PCA com dados ambientais, nós vamos usar o conjunto de dados ‘varechem’ do pacote ‘vegan’, que contém 14 variáveis edáficas (enfatizando ‘características do solo’) para a vegetação de sub-bosque em florestas secas de Pinus sylvestris (24 locais), na Finlândia. # Abrir dados armazenados no pacote vegan library(vegan) data(varechem) # Desativar a notacao cientifica dos valores 38 options(scipen=999) # Calcular a variancia das variaveis usando a funcao nativa ‘var’. Ou use ‘sd’ para desvio padrao round(apply(varechem,2,var),2) ## Calcular PCA com base em correlacao. Basta usar o argumento scale = TRUE na funcao prcomp varechem.pca<-prcomp(varechem, scale=TRUE) varechem.pca # Desvio-padrao dos componentes principais e loadings (correlacoes) summary(varechem.pca)# Porcentagem de variancia capturada por cada eixo da PCA # Visualizar os scores da PCA (os eixos) varechem.pca$x # Graficos basicos (biplot) da PCA biplot(varechem.pca) # plota os scores dos locais screeplot(varechem.pca) # grafico de barras screeplot(varechem.pca, type="lines") # grafico de linhas ## Grafico avançado da PCA usando a funcao ‘ggbiplot’ source("ggbiplot.txt")# buscar o arquivo da funcao ggbiplot na sua pasta pessoal do computador ggbiplot(varechem.pca, obs.scale = 1, var.scale = 1, ellipse = TRUE, circle = TRUE) + scale_color_discrete(name = '') + theme(legend.direction = 'horizontal', legend.position = 'top') Conclusões 39 A PCA geralmente é bem-sucedida quando existem fortes correlações entre as variáveis originais. Raramente a PCA é bem-sucedida quando empregada em variáveis não padronizadas, porque os eixos da PCA tendem a ser dominados por uma ou duas variáveis com grandes unidades de medida. Ela é ideal para dados com relações aproximadamente lineares entre variáveis. Geralmente, dados ecológicos são não-lineares. Outra limitação da PCA é que ela é usada somente com “dados quantitativos” e “distâncias euclidianas” entre observações. Exercício Calcule uma PCA com o conjunto de dados ‘varespec’ do pacote ‘vegan’, que contém a cobertura de 44 espécies de plantas para a vegetação de sub-bosque em florestas secas de Pinus sylvestris (24 locais), na Finlândia. Não esqueça de verificar a variância (ou desvio-padrão) das variáveis para decidir qual PCA usar. 6.2. Análise de coordenadas principais (principal coordinate analysis, PCoA) Um método de ordenação similar à PCA, mas que pode usar qualquer medida de distância multivariada. Enquanto PCA usa somente “dados quantitativos” e “distância euclidiana”, PCoA aceita qualquer tipo de dado e qualquer medida de distância. Pela sua flexibilidade, a PCoA é indicada para a maioria das aplicações de ordenação com o objetivo de preservar as distâncias multivariadas originais entre as observações no espaço da ordenação. Diferentemente da PCA, o objetivo principal da PCoA é a exploração de dados para ilustrar padrões e gerar hipóteses. Note que PCoA é equivalente a PCA quando distâncias euclidianas são empregadas. Existem várias funções para calcular PCoA no R. As funções mais populares são: cmdscale (pacote ‘stats’) e pcoa (pacote ‘ape’). Aqui nós 40 vamos usar cmdscale. Medidas de dissimilaridade semi-métricas (p.ex., Bray- Curtis) podem gerar autovalores negativos (negative eigenvalues) na PCoA. Ambas funções têm correções para autovalores negativos. Exemplo Vamos usar o conjunto de dados ‘varespec’ do pacote ‘vegan’ para ilustrar a aplicação da PCoA no R usando a distância de Jaccard para dados binários (presença/ausência). ## Abrir dados armazenados no pacote vegan library(vegan) data(varespec) ## Transformar dados de cobertura em presença/ausencia usando a funcao decostand varespec.pa<-decostand(varespec, "pa") ## Calcular distancias de Jaccard jaccard <- vegdist(varespec.pa, binary=TRUE, "jaccard") ## Calcular PCoA pcoa<-cmdscale(jaccard, eig=TRUE) ## Plotar diagrama de ordenacao plot(pcoa$points) ## Plotar especies e locais no diagrama de ordenacao pcoa$species <- wascores(pcoa$points, varespec, expand = TRUE) # calcula os escores para as especies ord <- ordiplot(pcoa, type = "none") points(ord, "sites", pch=21, col="red", bg="yellow") text(ord, "species", col="blue", cex=0.9) 41 O argumento eign indica os autovalores (eigenvalues) e GOF (godness of fit) indica a porcentagem de explicação (variância) dos eixos indicados no argumento k. Para k= 2 (default), o GOF indicará a porcentagem de variância explicada por esses dois eixos. O argumento add=TRUE é uma constante de modo que as dissimilaridades computadas são euclidianas e, portanto, podem ser representadas em n-1 dimensões. Observação: O default da função cmdscale calcula a PCoA apenas para dois eixos de ordenação (k=2). Caso queira acrescentar mais eixos, use o argumento k, como por exemplo, cmdscale(k=4). Conclusões A PCoA é apropriada quando outras medidas de distância são necessárias (a PCoA é equivalente à PCA quando distâncias euclidianas são empregadas para medir a dissimilaridade entre observações). É recomendado usar uma transformação quando PCoA gerar autovalores negativos. Para tal, basta usar o argumento add = TRUE na função cmdscale. 6.3. Escalonamento multidimensional não-métrico (non-metric multidimensional scaling, NMDS) Um método de ordenação que preserva a ordem da classificação das distâncias originais entre observações. Este método geral e robusto de ordenação pode usar qualquer medida de distância. Os dois métodos de ordenação anteriores (PCA e PCoA) são similares no que diz respeito às distâncias entre as observações a serem preservadas, na medida do possível, depois dos dados multivariados terem sido reduzidos a um 42 número menor de variáveis-chave. Em contraste, apenas a ordem de classificação das distâncias originais é preservada na NMDS. O objetivo na NMDS é criar um diagrama de ordenação no qual objetos diferentes são posicionados distantes no espaço de ordenação, enquanto os similares são posicionados próximos. Existem diferentes funções para calcular NMDS no R. Nós vamos usar a função metaMDS do pacote ‘vegan’. Essa função é um caso especial. A ordenação real é realizada pela função monoMDS (ou alternativamente usando isoMDS do pacote MASS). A função metaMDS é um embrulho (wrapper) para calcular NMDS como recomendado em ecologia: ela usa medidas de dissimilaridade adequadas (função vegdist), então executa NMDS várias vezes com configurações iniciais aleatórias, compara resultados (função procrustes), e finaliza depois de encontrar duas vezes uma solução de estresse mínimo semelhante. Finalmente, ela dimensiona e gira a solução e adiciona pontuações das espécies (scores) à configuração como médias ponderadas (função wascores). Exemplo Vamos usar o conjunto de dados ‘dune’ do pacote ‘vegan’ para ilustrar a aplicação da NMDS no R usando a distância de Bray-Curtis. Note que Bray- Curtis é a distância default da função metaMDS. ## Abrir dados armazenados no pacote vegan library(vegan) data(dune) ## Desativar notacao cientifica options(scipen=999) ## Calcular NMDS ## Note que a funcao metaMDS usa o argumento ‘autotransform =TRUE’. Ou seja, os dados das especies (p.ex., abundancia ou cobertura) são padronizados 43 usando ‘Wisconsin double standardization’. Primeiro, cada especie e padronizada pelo seu valor maximo e, então, cada local (ou unidade amostral) e padronizado pelo seu valor total (total da linha correspondente). Certifiquem-se que os seus dados precisam ser transformados. Caso negativo, use autotransform=FALSE nmds<-metaMDS(dune) nmds ## Criar um grafico de ‘bondade de ajuste’ (estresse) usando a funcao ‘stressplot’ ## O estresse e uma medida de quao bem os resultados de uma NMDS predizem os valores observados (dissimilaridades originais) ## A funcao stressplot desenha um grafico de Shepard, onde as distancias de ordenacao sao plotadas contra as dissimilaridades originais, e o ajuste e mostrado como uma linha monotona bray.wisconsin<-wisconsin(dune) # Transformar dados bray<-vegdist(bray.wisconsin) # calcular distancias de Bray-Curtis com dados transformados stressplot(nmds, bray) # plotar grafico de estresse ## Graficos básicos da NMDS plot(nmds, type="t") # O argumento “t” exibe os nomes abreviados das especies (como consta na tabela) e os identificadores (ID) dos locais plot(nmds, type="p")# O argumento “p” exibe os pontos (cruzes vermelhas sao as especies e circulos as unidades amostrais) 44 ## Com o argumento display = "species" somente as especies aparecerão no grafico e com display = "sites" somente as unidades amostrais aparecerao plot(nmds, type="t", display = "species") plot(nmds, type="t", display = "sites") ## Adicionar itens no diagrama de ordenacao ## A funcao ‘ordihull’ desenha linhas ou poligonos para os cascos convexos (convex hulls) ## A funcao ‘ordiellipse’ desenha linhas (draw = c("lines")) ou poligonos (draw = c("polygon")) para elipses dos grupos. A funcao pode desenhar o (1) desvio padrao dos pontos (kind = "sd"), (2) erro padrão dos centroides (kind = "se"), e (3) uma elipse que envolve todos os pontos de um grupo (kind = "ehull") usando a funcao ‘ellipsoidhull’ (pacote ‘cluster’) data(dune.env) # abrir matriz dune.env attach(dune.env) # anexar matriz ## Plotar poligonos para os cascos convexos (convex hulls) dos grupos plot(nmds, disp="sites", type="n") ordihull(nmds, Management, draw = c("polygon"), col=1:4, lwd=3, label = TRUE) points(nmds, disp="sites", pch=21, col="blue", bg="red", cex=1.3) ## Plotar elipses englobando todos os pontos de cada grupo plot(nmds, disp="sites", type="n") 45 ordiellipse(nmds, Management, col=1:4, kind = "ehull", lwd=3, label = TRUE) points(nmds, disp="sites", pch=21, col="blue", bg="red", cex=1.3) ## Plotar elipses com o desvio padrao dos pontos plot(nmds, disp="sites", type="n") ordiellipse(nmds, Management, col=1:4, draw="polygon", kind = "sd", label = TRUE) points(nmds, disp="sites", pch=21, col="blue", bg="red", cex=1.3) ## Plotar um diagrama de 'aranha' onde cada ponto e conectado ao centroide do grupo com segmentos plot(nmds, disp="sites", type="n") ordispider(nmds, Management, col=1:4, label = TRUE) points(nmds, disp="sites", pch=21, col="blue", bg="red", cex=1.3) ## Ajustar variaveis ambientais na ordenacao NMDS usando a funcao envfit nmds.fit <- envfit(nmds ~ A1 + Management, data=dune.env, perm=999) nmds.fit plot(nmds, dis="site") plot(nmds.fit) Conclusões NMDS é o método de ordenação mais robusto para dados ecológicos (heterogêneos). Ele não é baseado na suposição de “relações lineares” entre 46 variáveis” e permite o uso de “qualquer” medida de distância. Portanto, é um método indispensável na caixa de ferramentas de ecólogos e cientistas ambientais. Exercício Faça uma ordenação NMDS usando o conjunto de dados ‘BCI’ do pacote ‘vegan’, que contém 50 parcelas (linhas) de 1ha com contagens de árvores (um total de 225 espécies) na ilha Barro Colorado, Panamá. Escolha uma medida de distância adequada para esses dados antes de rodar a NMDS. Em seguida, use a funcao envfit para ajustar duas variáveis ambientais (EnvHet e Habitat) na ordenação. Essas duas variáveis estão em ‘BCI.env’, que contém nove variáveis ambientais para as 50 parcelas, onde as espécies arbóreas foram amostradas. 6.4. Análise de redundância (redundancy analysis, RDA) Um tipo de regressão múltipla usado quando tanto a variável preditora quanto a variável resposta são multivariadas. A RDA é simplesmente uma extensão multivariada (Y1 + Y2 + Y3... = X1 + X2 + X3...) da análise de regressão múltipla (Y = X1 + X2 + X3...). Ao contrário da regressão, a RDA não requer que os dados tenham “distribuição normal” (multivariada) porque ela usa testes de randomização para determinar a significância dos resultados. No entanto, ela assume “relações lineares” entre variáveis e “distâncias euclidianas” entre observações. Além disso, a RDA assume “amostragem aleatória” e “independente”, uma suposição constante em inferência estatística clássica. Em RDA, cada variável resposta Y é regressada sobre todas as variáveis preditoras X, e valores ajustados são calculados. Em seguida, uma PCA é realizada com a matriz de valores ajustados de Y. É importante notar que essa primeira etapa da RDA pode ser afetada pela “multicolinearidade” entre as 47 variáveis preditoras. Multicolinearidade é um conceito estatístico onde variáveis preditoras, em um modelo, são altamente correlacionadas entre si. Existem duas formas básicas para verificar a multicolinearidade no R: (1) calcular uma matriz de correlação entre todas as variáveis preditoras com a função cor ou (2) calcular um fator de inflação de variância (VIF) para cada variável preditora com a função vif.cca após rodar a RDA. Em termos gerais, VIF mede a proporção em que a variância de um coeficiente de regressão é inflacionado pela presença de outra variável. Quanto maior o valor de VIF, maior a correlação da variável em questão com outras variáveis no model. Valores maiores que 4 ou 5 são às vezes considerados moderados a altos, enquanto valores maiores que 10 são considerados muito altos. Notem que esses valores constituem “convenções arbitrárias”. Exemplo Nós vamos usar os conjuntos de dados ‘varespec’ e ‘varechem’ (vegetação de sub-bosque, Finlândia) do pacote ‘vegan’ para ilustrar a aplicação da RDA no R. ## Abrir dados armazenados no pacote vegan library(vegan) data(varespec) data(varechem) ## Desativar notacao cientifica options(scipen=999) ## Calcular transformacao de corda varespec.chord <- decostand(varespec, "norm"), "euclidean") ## Calcular RDA para todas as variaveis rda.result <- rda(varespec.chord ~ scale(varechem)) ## Verificar multicolinearidade usando funcao vif.cca 48 vif.cca(rda.result) ## Remover a variavel com maior VIF usando ‘varechem$ <- NULL’ ## Calcular novamente a RDA sem a variavel com maior VIF rda.result <- rda(varespec.chord ~ scale(varechem)) ## Verificar multicolinearidade apos a remocao da variavel com maior VIF vif.cca(rda.result) ## Exibir resultados da RDA rda.result # resultados resumidos summary(rda.result) # resultados completos Estatísticas geradas na RDA Particionamento da variância (partitioning of variance): A variação ou variância (inertia) dos dados é particionada em duas frações: restrita (constrained) e irrestrita (unconstrained). A variação restrita (= R2) é a quantidade de variação das variáveis respostas (neste caso, a matriz de espécies) que é explicada pelas variáveis preditoras (neste caso, a matriz de variáveis ambientais). A variação irrestrita é a porcentagem de variação não explicada. No entanto, este R2 é tendencioso (veja abaixo o R2 ajustado). Eixos da RDA e escores: Cada eixo da RDA possui um autovalor (eigenvalue) que indica a proporção da variância explicada. Os escores ou pontuações (scores) das espécies e locais (sites) nos dizem onde esses objetos se localizam ao longo dos eixos da ordenação. Autovalores e sua contribuição para a variância (eigenvalues and their contribution to variance): A contribuição cumulativa da variância é a proporção da variância total das variáveis respostas explicada pela RDA. 49 Autovalores restritos acumulados (accumulated constrained eigenvalues): Quantidades cumulativas de variância expressas como proporções da variância total explicada. Escores das espécies (species scores): Coordenadas das extremidades dos vetores representando as variáveis respostas no gráfico. Escores dos sites (site scores): Coordenadas dos sites expressas no espaço das variáveis respostas. Restrições dos sites (site constraints): Coordenadas dos sites no espaço das variáveis explanatórias. Escores das variáveis explanatórias (biplot scores for constraining variables): Coordenadas das extremidades dos vetores representando as variáveis explanatórias. # Calcular R2 ajustado ## O R2 ajustado mede a quantidade ‘imparcial’ ou ‘nao- inviesada’ de variação explicada. Ele ajusta o R2 pelo numero de variaveis explanatorias incluidas na analise. O R2 e enviesado ou tendencioso, pois na medida em que acrescentamos variaveis no modelo esse indice aumenta, mesmo que essas variaveis nao tenham importancia. R2adj <- RsquareAdj(rda.result)$adj.r.squared R2adj ## Calcular testes de permutacao para avaliar significancia estatistica (P) dos resultados ## Teste de permutacao global anova(rda.result, permutations = how(nperm=9999)) ## Teste de permutacao para os eixos da ordenacao 50 anova(rda.result, by="axis", permutations = how(nperm=9999)) ## Teste de permutacao para todas as variaveis anova(rda.result, by="terms", permutations = how(nperm=9999)) ## Teste de permutacao para variaveis preditoras individuais varechem.scale<-scale(varechem) varespec.chord<-data.frame(varespec.chord) varechem.scale<-data.frame(varechem.scale) rda.global <- rda(varespec.chord ~ ., varechem.scale) empty.model <- rda(varespec.chord ~ 1, varechem.scale) add1(empty.model, scope=formula(rda.global), test="perm") ## Plotar diagrama da RDA plot(rda.result)# plotar grafico default plot(rda.result, display=c("wa")) # apenas os escores dos locais plot(rda.result, display=c("wa","cn")) # escores dos locais e centroide das variaveis ambientais plot(rda.result, display=c("sp")) # apenas os escores das especies plot(rda.result, display=c("sp","cn")) # escores das especies e centroides das variaveis ambientais plot(rda.result, display=c("wa"),type="n") text(rda.result, display=c("cn")) Conclusões 51 A RDA assume que as espécies (ou outras variáveis respostas Y) têm relações lineares com variáveis ambientais (ou outras variáveis X). Ela é baseada em “distâncias euclidianas” entre observações. Portanto, transformar a matriz de espécies usando a transformação de Hellinger ou corda pode otimizar a RDA. Assim como a regressão, a RDA é afetada pela multicolinearidade entre variáveis preditoras. 6.5. Análise de redundância baseada em distância (distance-based redundancy analysis, dbRDA) É uma irmã da RDA que pode usar qualquer medida de distância. A RDA é baseada na distância euclidiana. A dbRDA é uma extensão da RDA para modelos multivariados complexos. Ela não requer que (1) os dados tenham distribuição normal multivariada, (2) as medidas de distância entre observações sejam euclidianas, ou (3) que existam mais observações do que variáveis respostas medidas. Assim como a RDA, ela (1) usa testes de permutação (ou randomização) para determinar a significância dos resultados, (2) enfatiza relações lineares entre variáveis repostas e preditoras, e (3) é afetada pela multicolinearidade. Existem duas funções no pacote ‘vegan’ para calcular dbRDA: (1) a função capscale ordena a matriz de dissimilaridades usando uma ordenação PCoA e, em seguida, usa RDA para analisar os resultados da ordenação, e (2) a função dbrda decompõe diretamente a matriz de distâncias (sem usar RDA) a partir de uma implementação paralela adaptada. A função capscale ignora autovalores negativos ou permite usar uma correção, enquanto a função dbrda lida com os autovalores negativos (em outros termos, autovalores negativos correspondem a somas de quadrados negativas). Na prática, essas funções geram resultados 52 similares. No entanto, McArdle & Anderson, M.J. (2001) em seu paper seminal sobre dbRDA apresentaram evidências convincentes que dbrda é preferível a capscale. Exemplo Para ilustrar a aplicação da dbRDA no R, vamos usar dados de ocorrência (presença/ausência) de 50 espécies de aves terrestres em 18 ilhas cobertas por florestas de coníferas no arquipélago de Sipoo, sul da Finlândia. ## Abrir dados armazenados no pacote vegan library(vegan) data(sipoo) ## dados das aves data(sipoo.map) ## variaveis das ilhas ## Desativar notacao cientifica options(scipen=999) ## Calcular distancias de Jaccard com a matriz sipoo sipoo.jaccard <- vegdist(sipoo, "jaccard", binary=TRUE) ## Calcular dbRDA usando a variavel preditora ‘area da ilha’ dbrda.result <- dbrda(sipoo.jaccard ~ sipoo.map$area) summary(dbrda.result) # Teste de permutacao global anova(dbrda.result, permutations = how(nperm=9999)) ## Teste de permutacao para os eixos da ordenacao anova(dbrda.result, by="axis", permutations = how(nperm=9999)) ## Teste de permutacao para as variaveis preditoras anova(dbrda.result, by="terms", permutations = how(nperm=9999)) 53 ## Plotar diagram de ordenacao plot(dbrda.result, display=c("wa"), xlab="dbRDA1", ylab="dbRDA2") # plotar os escores dos locais Conclusões A dbRDA pode ser usada com qualquer medida de distância, métrica ou semimétrica, e permite a partição dos componentes de variação em modelos multivariados complexos. Assim como sua irmã RDA (e análises correlatas), dbRDA enfatiza relações lineares entre variáveis repostas e preditoras, e (3) é afetada pela multicolinearidade. Com distâncias euclidianas, dbRDA é equivalente à RDA. A função dbrda é recomendada porque ela não requer “correções arbitrárias” para autovalores negativos. Além disso, ela é mais eficiente que capscale para lidar com modelos multivariados complexos (delineamentos multifatorias). Exercício Calcule uma dbRDA para os dados ‘varespec’ e ‘varechem’ (vegetação de sub-bosque, Finlândia) do pacote ‘vegan’ usando as funções capscale e dbrda e a distância de Bray-Curtis. Em seguida, compare os resultados gerados por essas funções. 6.6. Análise de correspondência canônica (canonical correspondence analysis, CCA) Um método de ordenação, tipicamente usado para relacionar a abundância (ou outros atributos) de espécies com variáveis ambientais. 54 CCA é atualmente um dos métodos mais populares em ecologia de comunidades. Diferentemente da RDA e dbRDA, CCA assume que as respostas das espécies aos gradientes ambientais são “unimodais” (em forma de arco). De forma geral, a CCA executa uma ordenação CA (correspondence analysis) com a matriz de dados das espécies e, então, relaciona a ordenação com as variáveis ambientais, e fornece uma avaliação sobre a importância relativa dos preditores. Uma das principais limitações da CCA (e de suas irmãs CA e DCA) é que ela é baseada na distância do qui-quadrado (chi-square distance). Essa distância é similar a distância euclidiana com dados submetidos a uma dupla padronização (ou seja, os valores são divididos pelas somas das linhas (locais) e raiz quadrada das somas das colunas, e ajustados pela raiz quadrada da matriz total). Essa “dupla padronização” dá um “alto peso” para espécies pouco abundantes, exagerando assim a distinção de locais contendo várias espécies raras. Existem diferentes funções para calcular CCA no R. A mais popular na área ambiental é a função cca do pacote ‘vegan’. Exemplo Para ilustrar a aplicação da CCA no R, nós vamos usar os conjuntos de dados ‘mite’ e ‘mite.env’ do pacote ‘vegan’, que contém dados de 35 espécies de ácaros Oribatídeos (um dos grupos de artrópodes mais abundantes no solo e na serapilheira de florestas), em 70 núcleos de solo, e cinco variáveis ambientais associadas. ## Abrir dados armazenados no pacote vegan library(vegan) data(mite) ## dados acaros Oribatideos data(mite.env) ## variaveis ambientais ## Desativar notacao cientifica options(scipen=999) 55 ## Calcular CCA usando as duas primeiras variaveis quantitativas em ‘mite.env’ cca.result <- cca(mite ~ mite.env$SubsDens + mite.env$WatrCont) cca.result # Teste de permutacao global anova(cca.result, permutations = how(nperm=9999)) # Teste de permutacao para os eixos da ordenacao anova(cca.result, by="axis", permutations = how(nperm=9999)) # Teste de permutacao para as variaveis anova(cca.result, by="terms", permutations = how(nperm=9999)) ## Porcentagem de variacao explicada pelas variaveis preditoras R2adj <- RsquareAdj(cca.result)$adj.r.squared R2adj ## Plotar diagrama de ordenacao plot(cca.result) Conclusões CCA constitui uma das ordenações mais populares em ecologia. É, no entanto, uma das ordenações mais perigosas nas mãos de quem não tem tempo para entender esse método relativamente complexo. Assim como a RDA e dbRDA, ela (1) usa testes de permutação (ou randomização) para determinar a significância dos resultados e (2) é afetada pela multicolinearidade entre preditores. Como a distância do qui-quadrado dá um “alto peso” para as 56 espécies raras, CCA pode exagerar a distinção de locais (ou comunidades) onde essas espécies estão presentes. Portanto, essa ordenação deve ser usada com cautela. 7. Comparação de grupos As análises multivariadas para comparação de grupos são extensões das análises univariadas/bivariadas. Por exemplo, a análise de variância (ANOVA) compara médias de dois ou mais grupos para uma única variável resposta quantitativa (Y), enquanto a análise multivariada de variância (MANOVA) compara médias multivariadas (centroides) de dois ou mais grupos ao longo de múltiplas variáveis Yn. As médias multivariadas representam os ‘centroides’ dos grupos, ou seja, os centros de uma nuvem de pontos no espaço multivariado. Em um espaço bidimensional, o centroide de cada grupo pode ser plotado como um ponto (X, Y) em um gráfico cartesiano. 7.1. Análise de variância multivariada permutacional (permutational multivariate analysis of variance, PERMANOVA) PERMANOVA é uma extensão não-paramétrica da MANOVA paramétrica, que permite usar qualquer medida de distância multivariada. Enquanto a MANOVA tradicional usa as variáveis respostas originais para particionar a variação dos dados, a PERMANOVA usa distâncias multivariadas entre observações (matriz de distâncias). Ela é melhor descrita como um particionamento geométrico da variação multivariada usando uma medida de
Compartilhar