Buscar

Apostila_analise_multivariada_2021 (1)

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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando