Clase 6: Índices de biodiversidad en R-project


Índices de biodiversidad

Continuando con este breve curso sobre bioestadística en R (Clase 1, Clase 2, Clase 3, Clase 4 y Clase 5), en esta oportunidad intentaremos abordar el problema de los índices de biodiversidad utilizando R. Comenzaremos con algunos conceptos previos.

¿Qué queremos decir por biodiversidad?

La biodiversidad o diversidad biológica se define como “la variabilidad entre los organismos vivientes de todas las fuentes, incluyendo, entre otros, los organismos terrestres, marinos y de otros ecosistemas acuáticos, así como los complejos ecológicos de los que forman parte; esto incluye diversidad dentro de las especies, entre especies y de ecosistemas” (UNEP, 1992). El término comprende, por tanto, diferentes escalas biológicas: desde la variabilidad en el contenido genético de los individuos y las poblaciones, el conjunto de especies que integran grupos funcionales y comunidades completas, hasta el conjunto de comunidades de un paisaje o región (Solbrig, 1991; Halffter y Ezcurra, 1992; Heywood, 1994; UNEP, 1992; Harper y Hawksworth, 1994).
Fuente: http://entomologia.rediris.es/sea/manytes/metodos.pdf


Es decir, existen distintas escalas de diversidad:

  • Diversidad a escala genética. 
  • Diversidad de especies: la diversidad alfa es la riqueza de especies de una comunidad particular a la que consideramos homogénea.
  • Diversidad a nivel de comunidades: la diversidad beta es el grado de cambio o reemplazo en la composición de especies entre diferentes comunidades en un paisaje, y la diversidad gamma es la riqueza de especies del conjunto de comunidades que integran un paisaje, resultante tanto de las diversidades alfa como de las diversidades beta (Whittaker, 1972).


Diversidad de especies. 

La diversidad alfa tiene dos componentes fundamentales:
  • riqueza específica: número de especies que tiene un ecosistema
  • estructura (equitabilidad): mide la distribución de la abundancia de las especies, es decir, cómo de uniforme es un ecosistema.

¿Cómo podemos traducir un concepto intuitivo en algo que podamos medir?



Fuente: http://entomologia.rediris.es/sea/manytes/metodos.pdf

Métodos paramétricos: índices

La medida de ocurrencia Jaccard o Coeficiente de comunidad es una medida muy simple e intuitiva (Shi 1993; Magurran 2004).
La medida de Sorenson o índice de Dice, Czekanowski or Coincidencem hace más énfasis a las especies presentes compartidas más que a las no compartidas, y su cálculo es relativamente simple e intuitivo (Wolda 1981; Hub?lek 1982).
Otros dos índices similares sue se utilizan ocasionalmente son las medidas de Ochiai y Kulczynski. Sin embargo, se eligen las medidas de Jaccard o Soreson porque son las más utilizadas actualmente.
El índice de Simpson intenta solucionar uno de los problemas más típicos, el de diferentes tamaños muestrales entre localidades. Comprar sitios con intensidades desiguales puede generar visiones sesgadas. Teniendo esto en cuenta, Simpson (1960) desarrolló una medida para tamaños muestrales distintos. Su fórmula reescala el valor por el número de especies del último sitio muestreo, por lo que una submuestra tendrá similitud con la muestra original. Por tanto, este índice es utilizado con datos altamente variables en intensidad de muestreo, por ejemplo los datos de fósiles.
La medida de Bray-Curtis es posiblemente la más utilizada, debido a su gran relación con las distancias ecológicas bajo condiciones variadas (Bray and Curtis 1957; Faith etal. 1987; Minchin 1987; Clarke 1993). Esta medida es equivalente a la de Soreson, cuando la utilizamos como medida de similitud con datos de ocurrencia.
A pesar de ser menos conocido, el índice de Mosisita-Horn es recomendable debido a su relativa independencia del tamaño muestral y diversidad (Wolda 1981; Magurran 2004). Existen muchas variantes de este índice.


Métodos no paramétricos y de rarefacción.

Uno de los métodos típicos para solucionar los problemas de muestreo desigual en intensidad, es el índice de rareza (o también conocido con el peculiar nombre de "rarefacción" o interpolación de los datos; Sanders 1968). Los índices de rareza permiten comparar entre distintas comunidades donde cada una es "enrarecida" a un número igual de ejemplares muestreados (Heck et al. 1975; Foote 1992; Colwell and Coddington 1994).

Los índices de rareza interpolan nuevos datos, mientras que los estimadores no paramétricos de especies extrapolan los datos para encontrar el "verdadero" número de especies (Colwell and Coddington 1994).

Los estimadores no paramétricos utilizan el número de especies raras para encontrar la manera de calcular qué tan probable es que hayan más especies sin encontrar en la muestra.

Por ejemplo, el estimador de Chao (Chao 1984; Colwell and Coddington 1994) calcula la diversidad de especies verdadera estimada de la muestra mediante los datos de abundancia. En caso de que no contemos con datos de abundancia sino de ocurrencia, podremos utilizer el estimator Chao 2 (Chao 1987; Colwell and Coddington 1994), que estima la diversidad de las especies a partir de los datos de ocurrencia de múltiples muestras.

Otro estimador es el de Jackknife (Burnham & Overton, 1978, 1979) originalmente utilizados para dates de capture y recaptura.

Dentro del paquete fossil existe un método de rarefacción conocido como la curva de Coleman(Coleman 1981; Coleman et al. 1982), que se desarrolla como un método de remuestreo más que mediante una fórmula de rareza.

Por último está el estimator de riqueza boostrap (Smith & van Belle, 1984).

Aplicación en R: paquetes fossil y vegan


###########################################################################
#                 Análisis de datos con R                                 #
#                           2012                                       #
#                        Msc. Rosana Ferrero                              #
#             http://statisticalecology.blogspot.com/                     #
###########################################################################

###########################################################################
# 6. ANÁLISIS DE BIODIVERSIDAD                           #
# librerías fossil y vegan
###########################################################################
 
 
###########################################################################
############           con la librería fossil             #################
############ 1. Manipulación de los datos  
############ 2. 
###########################################################################
library(fossil)   data(fdata.list) head(fdata.list)


############ 1. Manipulación de los datos  
#las funciones estimadoras de especies pueden agruparse en 2 categorías: las que usan los datos de ocurrencia y aquellas que usan los datos de abundancia. #matriz de ocurrencias ocurrencias=create.matrix(fdata.list,tax.name="species",locality="locality")  
#toma la lista de las especies y su ocurrencias, y las convierte en una matriz de especies (filas) y localidades (columnas).
 
#matriz de abundancia
abundancias=create.matrix(fdata.list,tax.name="species",locality="locality", abund=TRUE,abund.col="abundance") 
#crea una matriz de abundancias, se trata de la misma función anterior pero ahora incluye la opción abund=TRUE y el argumento abund.col que corresponde a la columna de los valores de abundancia.
#para este ejemplo, el resultado es el mismo que data(fdaa.mat)
 
#matriz de coordenadas
coordenadas=create.lats(fdata.list,loc="locality",long="longitude", lat="latitude") 
#extrae las coordenadas de los sitios, eliminando aquellas entradas que se repiten.

#La función dino.dist() toma una matrix de ocurrencia de especies vs. localidad (o grupos) y devuelve una matriz de distancia pareadas.
##matriz de distancia entre cualquier número de localidades
    #ecol.dist(x, method = sorenson, type = "dis")      
    #dino.dist(x, method = sorenson, type = "dis")
    
    data(fdata.mat)
    ecol.dist(fdata.mat)
    ecol.dist(fdata.mat,simpson,"sim")



#gráfico
      data(fdata.mat)
      fdata.dist=dino.dist(fdata.mat)
      fdata.mst=dino.mst(fdata.dist)
      data(fdata.lats)
      library(maps)
      map("state")
      mstlines(fdata.mst,coordinates(fdata.lats))
      points(coordinates(fdata.lats),pch=16,col="white",cex=3)
      points(coordinates(fdata.lats),pch=1,cex=3)
      text(coordinates(fdata.lats),labels=LETTERS[1:12])


 

############ 2. Índices de distancia/similitud/diversidad beta

#Coefficient Name  Formulae        Alternate Name                   Function Call
#Jaccard         a/(a+b+c)         Coefficient of Community             jaccard()
#Sorenson        2a/(2a+b+c)       Dice, Czekanowski, Coincidence Inde sorenson()
#Simpson         a/(a+min(b,c))    -                                    simpson()
#Braun-Blanquet  a/(a+max(b,c))    -                             braun.blanquet()
#Ochiai          a/sqrt{(a+b)(a+c)} Coefficient of Closeness             ochiai()
#Kulczynski      [a/(a+b)+a/(a+c)]/2 -                               kulczynski()
 
#otros:
    braun.blanquet(x, y)
    bray.curtis(x, y)
    euclidean(x,y)
    kulczynski(x,y)
    jaccard(x, y)
    manhattan(x, y)
    morisita.horn(x, y)
    ochiai(x, y)
    simpson(x, y)
    sorenson(x, y)
 
#Todas las funciones de similitud se utilizan de la misma manera. Las funciones necesitan dos argumentos que representen las dos muestras. Es importante que las ocurrencias de especies estén colocadas de misma manera para cada sitio, y que cada especie ausente se represente por el cero.
    sampleA=c(1,1,0,1,1,1,1)
    sampleB=c(0,1,1,0,0,1,1)
    sorenson(sampleA,sampleB)
 
##Conteo de especies de 2 localizaciones diferentes.
    a = c(1,0,4,3,5,0,0,7)
    b = c(2,1,3,0,0,1,0,6)
    bray.curtis(a,b)
    jaccard(a,b)
    simpson(a,b)
    sorenson(a,b)
    morisita.horn(a,b)
 


##### 3. Métodos con muestras complejas (incompletas) o pequeñas: aleatorización, remuestreo, boostrap. 
data(fdata.mat)
head(fdata.mat) #es nuestra matriz de "abundancias"
chao1(fdata.mat)
jack1(fdata.mat)
 
 
## con aleatorización
  #spp.est(). La función tiene varias opciones: el número de aleatorizaciones y si utilizar o no datos de abundancias. Calcula la curva de rareza de Chao, Coverage Estimators y Jacknife, así como las desviaciones estándar para todas las estimaciones. Por defecto la función corre 10 aleatorizaciones de los datos, sin embargo si queremos mejores estimaciones tendremos que aumentar dicho número.
e run.
 
  #ejemplo con datos de abundancia 
  data(fdata.mat)
  spp.est(fdata.mat, abund = TRUE, counter = FALSE)
 
  #ejemplo con datos de ocurrencia
  data(fdata.mat)
  spp.est(fdata.mat, abund = FALSE, counter = FALSE)
 
 
## los estimators de Chao-Jaccard y Chao-Sorenson como estimadores de las especies cuando tenemos datos incompletos
    #chao.sorenson(x, y)      chao.jaccard(x, y)
    #se deben datos dos vectores separados, con las especies dispuestas con el mismo orden, desde el área A a la B. Si la especie está presente en uno de los sitios pero no en el otro, debe ser identificada en ambos sitio; en el sitio donde no se encontró se codificará con un cero. Especies que no estén presentes en ninguno de los dos sitios serán ignoradas.
    ##conteo de especies en 2 localizaciones diferentes
    a = c(1,0,4,3,5,0,0,7)
    b = c(2,1,3,0,0,1,0,6)
    chao.sorenson(a,b)
    chao.jaccard(a,b)
 
## Método de Bootstrap en estimadores de riqueza de especies, para datos de abundancia o para datos de presencia-ausencia.

    ## vector muestra
    a=c(0,5,1,1,2,0,0,1,0,0,8,45)
    bootstrap(a,samples=45)
 
    ## formato matricial
    a=matrix(c(0,5,1,1,2,0,0,1,0,0,8,45),4,3)
    bootstrap(a)
    bootstrap(a,,FALSE)   
 
    ## matriz de presencia-ausencia
    a=matrix(c(0,1,1,1,1,0,0,1,0,0,1,1),4,3)
    bootstrap(a,,FALSE)
 
    ## matiz de abundancia
    bootstrap(fdata.mat,,TRUE,samples=1000)
 



###########################################################################
############## con la librería vegan ###################
###########################################################################


#Vamos a utilizar unos datos clásicos de la diversidad de árboles de Barro Colorado. Los datos consisten de 50 parcelas (filas) de 1 hectárea donde se realiza el conteo de los árboles en cada parcela y la identificación de su especie (columnas). Se incluyeron todos los árboles con diámetros por encima de 10cm. Se encontraron 225 especies.

data(BCI) # Barro Colorado Island tree data # 50 1-ha plots, counts of 225 spp.
View(BCI) #para ver los datos
fix(BCI)
 
### Riqueza específica: índices
cts= c(20,12,5,3,2,1,1,0,0,0) # counts for 10 spp
#1. Sin utilizar vegan
sum(cts>0) #7: sums a logical vector: T=1,F=0
#2. Utilizando vegan
specnumber(BCI) # función para encontrar el número de especies, trabaja con matrices
specnumber(cts) # error
specnumber(matrix(cts,nrow=1)) 
 
#Diversidad: otras métricas. Función diversity()
diversity(BCI, index="shannon") # Shannon-Wiener, H
diversity(BCI, index="simpson") # Simpson, 1-D
diversity(BCI, index="invsimpson") # Inverse Simpson, 1/D
fisher.alpha(BCI) # parameter alpha of the log-series 

Vegan no tiene índices de equitatividad o igualdad, peru podemos calcular el más común de ellos, el índice de Pielou: J = H′/ log(S) de una manera sencilla

J <- H/log(specnumber(BCI))

# Rarefacción:
# min N in BCI data is 340
bci.340 = rarefy(BCI, sample=340, se=FALSE)
plot(bci.340)
#Curvas de rarefacción.
    #? Based on rarefying to many different subsample sizes.
    #? rarefy() can only take a single value for sample.
    #? Can call it lots of times, and collect the data: tedious!
    #? In Session 4, we?ll make our own function to do this.
 

También existen las funciones:

specaccum #Species accumulation 
renyiaccum; tsallisaccum #diversity accumulation fisherfit; prestonfit; radfit #Species abundance models specpool, estimateR # Extrapolated species richness beta diver; betadisper #Indices of betadiversity
taxondive #Taxonomic diversity
treedive #one option of functional diversity 
Null models and nestedness (oecosimu with support functions)
Technical and advanced functions like dissimilarity indices (vegdist, designdist) and their extensions (step across)



Bibliografía y material para profundizar:

http://entomologia.rediris.es/sea/manytes/metodos.pdf
http://duncanjg.files.wordpress.com/2008/02/clasediversidad1.pdf
http://www.um.es/docencia/geobotanica/ficheros/practica2.pdf
http://prof.usb.ve/eklein/labeco2/biblio/Estructura%20de%20las%20comunidades.pdf
http://palaeo-electronica.org/2011_1/238/238.pdf
http://cran.r-project.org/web/packages/vegan/vignettes/diversity-vegan.pdf
http://www.bio.utk.edu/fesin/msa2009/snowbeam4.pdf

Comentarios

  1. me interesa hacer un Intervalo de confianza Bootstrap del Indice de Shannon

    ResponderEliminar
  2. Buenas tardes, antes que nada mil disculpas por la molestia, me llamo Santiago Hernandez y soy biólogo. Justamente en estos días encontré su sitio y me intereso mucho el tema de estadística específicamente con relación a los indices de rarefacción y tengo una pregunta...

    El indice de Chao 1, predice las especies de un área muestreada o de toda el área?
    Ejemplo: si en 10 hectáreas de bosque coloco 3 transectos (100 x 4m), el indice solo me predice las especies de esos 3 transectos (recorridos) o también me puede predecir las especies de las 10 hectáreas???

    Espero que la pregunta este clara, le agradecería mucho si me puede ayudar con esa inquietud, gracias y hasta pronto..

    Att.

    Santiago Hernandez

    ResponderEliminar
  3. Buen día.

    Cual es la metodología o análisis que pudiera realizarse para saber si las poblaciones de especies vienen cambiando en el tiempo y como se demostraría con los monitoreos y sus análisis en R, o que tipo de análisis se tendría q hacer para determinar estos cambios.
    Gracias.

    ResponderEliminar

Publicar un comentario