Os objetivos deste exercício são:
Entener o que é diversidade verdadeira
Enteder e trabalar com índices de diersidade verdadeira
Saber quais as vantagens de se utilizar esses índices
Continue o script que você está construindo nos exercícios anteriores
HORA DE APRENDER
Lou Jost É um biólogo estadunidense que resgatou o conceito de diversidade verdadeira. Ele argumenta com elegância que os índices comuns utilizados para medir diversidade são pouco intuitivos e não respeitam propriedades matemáticas básicas como linearidade. Se aplicarmos alguns dos muits índices conhecidos de diversidade a um sistema hipotético “S”, esses índices podem nos dar valores “S”, “logS”,“1/S”, etc. Portanto, como é possível chamálos de índices de diversidade se suas fórmulas oferecem resultados diferentes e não -intercambiáveis? Jost argumenta que somente índices de diversidade verdadeira podem ser usados para análises de diversidade.
Mas o que é Diversidade Verdadeira? Em quais unidades devemos medi-la?
Jost argumenta que deveria ser óbvio que uma comunidade com 16 espécies de abundâncias exatamente iguais deveria ter o dobro de diversidade que uma comunidade com 8 espécies de abundâncias iguais. Isso é tão obvio que não deveria sequer ser explicado por escrito, mas se aplicars qualquer dos índices de diversidade mais famosos (p. ex. Shannon ou Simpsion) veremos que isso não é verdade. Veja:
comm16<-c(paste0("sp", 1:16)) # criei o vetor com 16 espécies.
abund16<-c(rep(5,16))# criei o vetor com valores de 5 repetidos 16 vezes de forma que as espécies tenham abundâncias iguais.
df1<-data.frame(comm16, abund16) # juntei tudo num data.frame
colnames(df1)<-c("especies", "abund") # renomeei as colunas
library(vegan) # chamei o Vegan
## Loading required package: permute
## Loading required package: lattice
## This is vegan 2.5-2
list(diversity(df1[,2], index = "shannon"), diversity(df1[,2], index = "simpson")) # gerei uma lista com valores de diversidade de shannon e simpson.
## [[1]]
## [1] 2.772589
##
## [[2]]
## [1] 0.9375
## Aqui refiz todo o procedimento anterior para gerar uma comuniades com metade das espécies igualmente abundantes.
comm8<-c(paste0("sp", 1:8))
abund8<-c(rep(5,8))
df2<-data.frame(comm8, abund8)
colnames(df2)<-c("especies", "abund")
list(diversity(df2[,2], index = "shannon"), diversity(df2[,2], index = "simpson"))
## [[1]]
## [1] 2.079442
##
## [[2]]
## [1] 0.875
# Note que os valores da comunidade "df1" não são o dobro da comunidade "df2"
Portanto, é perfeitamente lógico pensar que a comunidade df1, com 16 espécies igualmente abundantes tem o dobro de diversiade da comunidade df2 que possui 8 espécies igualmente abundantes. Portanto, eu poderia usar a unidades “S espécies igualmente abundantes” como unidade de medida para essa diversidade verdadeira porque essa unidade não traz ambiguidade alguma em seu cálculo nem em seu conceito.
Mas quando as comunidades não possuem abundâncias iguais entre as espécies (o que é extremamente comum), qual índice usamos? Aí é quando os problemas dos ínidces comuns de Shannon e Simpson geram problemas. Por exemplo, duas comunidades com índices de hsannnon no valor de 2.5 possuem o mesmo valor de diversidade, mas como esses índices são sensíveis tanto à riqueza quanto à distribuição das abundâncias, podemos ter comunidades muito diferentes com valores iguais de Shannon ou Simpsoon. Já para os índices de diversidade verdadeira, duas comunidades com valor igual devem apresentar a mesma propriedade que é o mesmo número efetivo de espécies. Ou seja, essa é a unidade de medida da diersidade verdadeira, o número efetivo de espécies.
Existem formas de transformar índices de entropia (shannon) ou de dminância (simpson) em índices de diversidade verdadeira. Para quem tiver interesse em ler o artigo completo, pode fazê-lo aqui. Em resumo, e como exemplo, a maneira de calcular o número efetivo de espécies para um dado valor de Shanon é através de seu exponencial. Portanto, para os valores que achamos acima para df1 e df2, podemos calcular facilmente o número de espécies efetivas da seguinte forma:
exp(2.772589) # diversidade verdadeira para a comunidade com 16 espécies
## [1] 16
exp(2.079442) # diversidade verdadeira para a comunidade com 8 espécies
## [1] 8.000004
Lou Jost compilou todas as fórmulas para a convesão de muitos índices de entropia e dominância em diversidade verdadeira
Tabela com as conversões entre fórmulas para encontrar a diversidade verdadeira de uma comunidade
Outro esemplo que Lou Jost cita é o comportamento inadequado do ídice de SImpson para medir a diversidade. Imaginemos uma comunidad com um milhão de espécies equivalentes (igualmente abundantes).O valor de SImpson para essa comunidade é de 0,999999. Daí uma praga acaba com 99,99% das espécies, sobrando apenas 100, ainda igualmente abundantes. Nessa condição extrema, o índice de Simpson para uma comunidade com 100 espécies igualmente abundantes cairia para 0,99, oque é apenas 1% menos que a diversidade pré-praga.
c1<-rep(5,1000000) # criei uma comuniade com 1 milhão de espécies de abundância 5
diversity(c1, index = "simpson")
## [1] 0.999999
c2<-rep(5,100) # baixei para 100 espécies agora
diversity(c2, index="simpson")
## [1] 0.99
Ou seja, mesmo perdendo 99,99% das espécies, o índices só cai 1%… Porderíamos seguir adiante com mais e mais exemplos de cada um dos índices, mas aqui é o suficiente para justificar a adoção da diversiade verdadeira como conceito e seus índices como mais adequados para informar sobre a diversidade de comunidades biológicas através do número efetivo de espécies
Aqui vamos introduzir um conceito chave para entender a diversidade verdadeira, que é o parâmetro q
Há toda uma justificativa matemática para a adoção desse parâmetro, mnas em resumo o parâmetro q serve para dar peso à abundância relativa de cada espécies dentro da comunidade estudada. Dessa forma, uando q = 0 todas as abundâncias relativas são elevadas a zero e portanto se igualam a 1; quando q = 1 temoas as abundâncias tal qual são apresentadas e quando q = 2, elevamos as abundâncias à segunda potencia, nos aproximando do inverso do índices de simpson. Hill (1973) enteneu que há três índices de diversidade verdadeira, a Riqueza, o Exponencial de Shannon e o inverso de Simpson. Hill argumentava que esses índices apresentavam uma propiredade importante, a de duplicação. Novamente, em resumo, essa propriedade é fundamental para o conceito de diversidade verdadeira, pois significa que se duplicarmos a quantidade de espécies equivalentes (abundâncias iguais), teremos dobrada a diversidade. Isso nos leva à formula proposta por Hill (1973) onde ele propõe uma única base para o cáuculo da diversidade verdadeira atravé da fómrula
Equação geral dos números de Hill = \[^qD=(\sum_{i=1}^S p_i^q )^{1/(1-q)}\]
Neste caso, é fácil notar que q será o parâmetro usado para dar peso às espécies e que se for zero, todas são tratadas iguais, aumentando assim o peso das espécies raras, já se for 1 será equivalente a Shannon e se for 2 será equivalente a Simpson.
Todos os códigos abaixo são do blog Sample Ecology
shannon=matrix(ncol=2,nrow=1000)
for(i in 1:1000) {
community=data.frame(t(rep(1,i))); colnames(community)=paste("sp",1:i)
shannon[i,1]=i
shannon[i,2]=diversity(community,index="shannon") }
plot(shannon[,1],shannon[,2],xlab="Species Richness",ylab="Shannon Diversity",
main="Shannon")
Examnine bem o comportamento do índice de Shannon puro, aplicado a uma comunidade de 1000 espécies de abundâncias iguais. Veja que ele é mais sensível para cmunidades com menos espécies mas com muitas, o incremento não é linear e a propriedade de duplicação não pode ser alcançada. Não há linearidade.
community1=data.frame(t(rep(1,500))); colnames(community1)=paste("sp",1:500) # criei uma comunidade com 500 espécies
community2=data.frame(t(c(rep(1,250)))); colnames(community2)=paste("sp",1:250) # criei uma comunidade com 250 espécies
HE1=exp(diversity(community1,index="shannon")); HE1
## [1] 500
HE2=exp(diversity(community2,index="shannon")); HE2
## [1] 250
as.character(HE2)==as.character(0.5*HE1)
## [1] TRUE
shannon_effective=matrix(ncol=2,nrow=1000)
for(i in 1:1000) {
community=data.frame(t(rep(1,i))); colnames(community)=paste("sp",1:i)
shannon_effective[i,1]=i
shannon_effective[i,2]=exp(diversity(community,index="shannon")) }
plot(shannon_effective[,1],shannon_effective[,2],xlab="Species Richness",
ylab="Effective Numbers of Species",main="Shannon (Effective)")
D1=diversity(community1,index="simpson"); D1
## [1] 0.998
D2=diversity(community2,index="simpson"); D2
## [1] 0.996
simpson=matrix(ncol=2,nrow=1000)
for(i in 1:1000) {
community=data.frame(t(rep(100,i))); colnames(community)=paste("sp",1:i)
simpson[i,1]=i
simpson[i,2]=diversity(community,index="simpson") }
plot(simpson[,1],simpson[,2],xlab="Species Richness",ylab="Simpson Diversity",
main="Simpson")
DE1=1/(1-D1); DE1 # gerando a diversidade verdadeira
## [1] 500
DE2=1/(1-D2); DE2 # gerando a diversidade verdadeira
## [1] 250
DE2==0.5*DE1 # tem que ser TRUE
## [1] TRUE
simpson_effective=matrix(ncol=2,nrow=1000)
for(i in 1:1000) {
community=data.frame(t(rep(100,i))); colnames(community)=paste("sp",1:i)
simpson_effective[i,1]=i
simpson_effective[i,2]=1/(1-diversity(community,index="simpson")) }
plot(simpson_effective[,1],simpson_effective[,2],xlab="Species Richness",
ylab="Effective Numbers of Species",main="Simpson (Effective")
# Vamos usar um pacote que calcula a diversidade verdadeira diretamente, o hillR
install.packages('hillR')
## Installing package into '/home/felipe/R/x86_64-pc-linux-gnu-library/3.5'
## (as 'lib' is unspecified)
library(hillR)
set.seed(9)
community3=data.frame(t(sample(1:1000,500))); colnames(community3)=paste("sp",1:500)
div_verd<-c(hill_taxa(community3,0),hill_taxa(community3,1),hill_taxa(community3,2)) # aqui temos as diversidades de ordem q = 0; 1 e 2
div_verd
## [1] 500.0000 414.1305 376.6210
Vamos agora entender como a beta-diversidade pode ser calculada com base nos números de Hill e portanto gerar beta diversidade verdadeira. Para isso, vamos recordar a relação proposta por Whittaker sobre as magnitudes da diversidade:
\(\gamma=\alpha*\beta\)
Bom, essa relação junto com o conceito de diversidade verdadeira que adota o nũmero de espécies efetivas, temos quase que intuitivamente a ideia de que Beta é o número de comunidades efetivas. A ideia aqui é que os números de Hill permitem que Beta e Alfa variem livremente.
Vamos a um exemplo para poder entender…
# Vamos usar o mesmo código que grou a matriz de dados do exercício 2
esp<-c(paste0("sp", 1:15)) # criei o vetor com as esp?cies, ser?o 15 para este exerc?cio.
frags<-c(paste0("f", 1:10)) # criei o vetor com as esp?cies, ser?o 10 para este exerc?cio.
usina<-matrix(sample(0:15, size = 10*15, replace = TRUE), nrow = 10, ncol = 15)# criei uma matriz com 10 linas (esp?cies) e 15 colunas (fragmentos)
colnames(usina)<-esp # atribui os nomes de linhas e colunas da matriz
rownames(usina)<-frags
usina # matriz criadas com abund?ncias aleat?rias, cada um de voc?s vai gerar resultados diferentes
## sp1 sp2 sp3 sp4 sp5 sp6 sp7 sp8 sp9 sp10 sp11 sp12 sp13 sp14 sp15
## f1 5 6 0 5 14 10 8 11 11 14 12 3 15 4 8
## f2 2 11 6 13 10 10 7 0 4 13 14 14 1 8 5
## f3 10 8 6 0 1 2 11 13 3 14 8 15 0 14 14
## f4 6 13 14 2 2 8 1 1 10 5 5 3 0 9 7
## f5 8 14 6 3 4 15 12 9 15 5 15 11 0 12 11
## f6 14 0 11 6 1 6 10 11 3 8 2 0 0 4 4
## f7 14 7 13 7 10 7 5 14 13 5 4 0 4 12 8
## f8 1 9 1 9 8 7 9 6 8 13 9 2 6 0 3
## f9 1 14 12 5 13 0 10 13 1 1 0 5 14 5 10
## f10 12 4 11 15 9 0 1 3 5 0 10 13 15 11 12
usina<-as.data.frame(usina)
usina[usina==3]<-0
usina[usina==4]<-0
usina[usina==13]<-0 # troquei valores iguais a 3 e 13 por zeor para aumentar as aus?ncias e ficar mais real?stico.
usina<-t(usina) # agora vamos rpecisa da matriz em outra posição, com especies nas linhas e amostras nas colunas
usina
## f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
## sp1 5 2 10 6 8 14 14 1 1 12
## sp2 6 11 8 0 14 0 7 9 14 0
## sp3 0 6 6 14 6 11 0 1 12 11
## sp4 5 0 0 2 0 6 7 9 5 15
## sp5 14 10 1 2 0 1 10 8 0 9
## sp6 10 10 2 8 15 6 7 7 0 0
## sp7 8 7 11 1 12 10 5 9 10 1
## sp8 11 0 0 1 9 11 14 6 0 0
## sp9 11 0 0 10 15 0 0 8 1 5
## sp10 14 0 14 5 5 8 5 0 1 0
## sp11 12 14 8 5 15 2 0 9 0 10
## sp12 0 14 15 0 11 0 0 2 5 0
## sp13 15 1 0 0 0 0 0 6 14 15
## sp14 0 8 14 9 12 0 12 0 5 11
## sp15 8 5 14 7 11 0 8 0 10 12
#Instale o pacote divpart
if (!require("entropart")) install.packages('entropart')
## Loading required package: entropart
MC<-MetaCommunity(usina)
summary(MC)
## Meta-community (class 'MetaCommunity') made of 925 individuals in 10
## communities and 15 species.
##
## Its sample coverage is 1
##
## Community weights are:
## f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
## 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
## Community sample numbers of individuals are:
## f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
## 119 88 103 70 133 69 89 75 78 101
## Community sample coverages are:
## f1 f2 f3 f4 f5 f6 f7
## 1.0000000 0.9888976 0.9904816 0.9722566 1.0000000 0.9859335 1.0000000
## f8 f9 f10
## 0.9736937 0.9615383 0.9900990
# Agora vamos calculara a diversidade alfa verdadeira nos três níveis
AlphaDiversity(MC, 0, Correction = "None") # veja o output, o progrma dá um alfa para cada fragmentos da usina e uma alfa média = $Total
## $MetaCommunity
## [1] "MC"
##
## $Method
## [1] "Neutral"
##
## $Type
## [1] "alpha"
##
## $Order
## [1] 0
##
## $Correction
## [1] "None"
##
## $Normalized
## [1] TRUE
##
## $Weights
## f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
## 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
##
## $Communities
## f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
## 12 11 11 12 12 9 10 12 11 10
##
## $Total
## [1] 11
##
## attr(,"class")
## [1] "MCdiversity"
AlphaDiversity(MC, 1, Correction = "None") # para ordem q= 1
## $MetaCommunity
## [1] "MC"
##
## $Method
## [1] "Neutral"
##
## $Type
## [1] "alpha"
##
## $Order
## [1] 1
##
## $Correction
## [1] "None"
##
## $Normalized
## [1] TRUE
##
## $Weights
## f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
## 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
##
## $Communities
## f1 f2 f3 f4 f5 f6 f7
## 11.293866 9.406421 9.428536 9.524751 11.428926 7.595797 9.371854
## f8 f9 f10
## 10.302869 8.390901 8.975659
##
## $Total
## [1] 9.505615
##
## attr(,"class")
## [1] "MCdiversity"
AlphaDiversity(MC, 2, Correction = "None") # para ordem q = 2
## $MetaCommunity
## [1] "MC"
##
## $Method
## [1] "Neutral"
##
## $Type
## [1] "alpha"
##
## $Order
## [1] 2
##
## $Correction
## [1] "None"
##
## $Normalized
## [1] TRUE
##
## $Weights
## f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
## 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1
##
## $Communities
## f1 f2 f3 f4 f5 f6 f7
## 10.752468 8.681614 8.818786 8.361775 11.007467 7.011782 8.830546
## f8 f9 f10
## 9.715026 7.474201 8.593934
##
## $Total
## [1] 8.764474
##
## attr(,"class")
## [1] "MCdiversity"
# Agora vamos calcular Beta
summary(BetaDiversity(MC, 0, Correction = "None")) # aqui peço as betas já na forma de summary
## Neutral beta diversity of order 0 of metaCommunity MC with correction:
## None
##
## Average diversity of the communities:
## [1] 1.363636
summary(BetaDiversity(MC, 1, Correction = "None"))
## Neutral beta diversity of order 1 of metaCommunity MC with correction:
## None
##
## Average diversity of the communities:
## [1] 1.552774
summary(BetaDiversity(MC, 2, Correction = "None"))
## Neutral beta diversity of order 2 of metaCommunity MC with correction:
## None
##
## Average diversity of the communities:
## [1] 1.658722
# Por último as Gamas
GammaDiversity(MC, 0, Correction = "None") # A gama de ordem zero é igual à riqeuza, portanto, 15
## None
## 15
GammaDiversity(MC, 1, Correction = "None") # Igual ao exponencial de Shannon
## None
## 14.76007
GammaDiversity(MC, 2, Correction = "None") # Igual ao invero de simpson
## None
## 14.53782
###Finalmente para entendermos a reação entre Alfa, Beta e Gama. Só é preciso mudar entre 0, 1 e 2 para obter para todas as ordens q de
summary(DivPart(q = 0, MC, Biased = FALSE, Correction = "None") -> dp0)
## HCDT diversity partitioning of order 0 of metaCommunity MC
## with correction: None
## Alpha diversity of communities:
## f1 f2 f3 f4 f5 f6 f7 f8 f9 f10
## 12 11 11 12 12 9 10 12 11 10
## Total alpha diversity of the communities:
## [1] 11
## Beta diversity of the communities:
## None
## 1.363636
## Gamma diversity of the metacommunity:
## None
## 15
plot(dp0)
summary(DivPart(q =1, MC, Biased = FALSE, Correction = "None") -> dp1)
## HCDT diversity partitioning of order 1 of metaCommunity MC
## with correction: None
## Alpha diversity of communities:
## f1 f2 f3 f4 f5 f6 f7
## 11.293866 9.406421 9.428536 9.524751 11.428926 7.595797 9.371854
## f8 f9 f10
## 10.302869 8.390901 8.975659
## Total alpha diversity of the communities:
## [1] 9.505615
## Beta diversity of the communities:
## None
## 1.552774
## Gamma diversity of the metacommunity:
## None
## 14.76007
plot(dp1)
summary(DivPart(q = 2, MC, Biased = FALSE, Correction = "None") -> dp2)
## HCDT diversity partitioning of order 2 of metaCommunity MC
## with correction: None
## Alpha diversity of communities:
## f1 f2 f3 f4 f5 f6 f7
## 10.752468 8.681614 8.818786 8.361775 11.007467 7.011782 8.830546
## f8 f9 f10
## 9.715026 7.474201 8.593934
## Total alpha diversity of the communities:
## [1] 8.764474
## Beta diversity of the communities:
## None
## 1.658722
## Gamma diversity of the metacommunity:
## None
## 14.53782
plot(dp2)
Para entender os gráficos, pense na relação entre as diversidaded e Whittaker… A barra maior horizontal é a gama, barra menor, marca a alfa no eixo ‘x’ e a beta no eixo ‘y’ De forma que a área da barra menor é sempre isgual à da barra maior, mudando sua forma (mais alta e menos comprida. ou vice-versa) segundo a contribuição de alfa ou beta para a gama.