14.1 Matrizes de distância
Matrizes de distância ou dissimilaridade são muito usadas em AEDs multivariadas. Por exemplo, para estimar a similaridade entre diferentes comunidades vegetais segundo a presença ou ausência de espécies (ou um índice de similaridade que leva em conta as abundâncias relativas); para estimar a similaridade entre espécies ou a relação entre similaridade genética ou morfológica e distância geográfica etc.
A função dist()
é a mais básica do R para calcular dissimilaridades entre objetos.
Ela calcula dissimilaridades segundo diferentes métodos (argumento method
).
Há também a função vegdist()
do pacote vegan
(Oksanen et al. 2020) que faz a mesma coisa, mas tem índices de dissimilaridade que dist()
não implementa, muito dos quais muito usados em ecologia de comunidades.
Busque ler o ?
dessas duas funções (execute ?dist
e ?vegdist
no console), atentando para os diferentes índices de dissimilaridade.
Na função vegdist()
, você encontra os principais índices de dissimilaridade usados em ecologia.
Para entender o que essas funções fazem, vamos ver um exemplo simples de cálculo de distância euclidiana, que é o método padrão de dist()
.
# usando o método euclidiano
# plota um gráfico vazio com coordenadas x e y de 1 a 10
plot(1:10, 1:10, type = "n")
# adiciona dois pontos:
# um na coordenada 4,4
points(4, 4, pch = 21, bg = "red")
# outro na coordenada x=8, y=8
points(8, 8, pch = 21, bg = "blue")
# a distancia euclidiana entre eles é dada por essa linha
segments(4, 4, 8, 8)
# essa linha é a hipotenusa do triângulo
polygon(x = c(4, 8, 8, 4), y = c(4, 8, 4, 4), density = 40)
# portanto a distancia entre os pontos, por Pitágoras, é
# sqrt(hipotenusa) = sum(catetoA^2+catetoB^2)
<- sqrt((8 - 4)^2 + (8 - 4)^2)
d
# agora usando a função dist
# coloco as coordenadas dos dois pontos acima num data.frame
<- data.frame(X = c(4, 8), Y = c(4, 8))
pontos pontos
X | Y |
---|---|
4 | 4 |
8 | 8 |
# calcula a distancia euclidiana para essas variáveis (X e Y)
dist(pontos, method = "eucl")
## 1
## 2 5.656854
# entao isso é verdadeiro
== dist(pontos, method = "eucl") d
## [1] TRUE