1 Introducción

1.1 Conceptos básicos

Definiciones fundamentales:

  • Especie: Grupo de organismos que se pueden reproducir entre sí y generar descendencia fértil.

  • Comunidad: Conjunto de diferentes especies que interactúan entre sí.

_
_
  • Muestreo: Método por el cual inferimos propiedades de una población objetivo (no confundir con población en el sentido ecológico).

  • Esfuerzo de muestreo: Número de individuos muestreados o el tiempo invertido en obtener datos.

_
_
  • Interpolación: Modelar datos dentro del intervalo observado.

  • Extrapolación: Modelar datos fuera del intervalo observado.

  • Abundancia: Qué tan común o raro es encontrar una especie en una comunidad.

  • Diversidad: Propiedad emergente de las comunidades que incorpora el grado de heterogeneidad de algún estado o propiedad (este estado puede ser diversidad de especies, gremios, grupos funcionales, familias, genética, etc).

_
_
  • Remuestreo: Técnica estadística que permite obtener estimaciones simulando submuestras de una muestra.

1.2 Tipos de diversidad

No existe una única forma de medir biodiversidad. Por lo tanto, hay diversas medidas que describen de manera distinta la diversidad. ¿Cómo responder a la pregunta qué tan diversa es una comunidad?

1.2.1 Diversidad

Diversidad α, β y γ

_ -(Tomado de Martínez-Santalla et al., 2024)-

Los índices que vamos a ver permiten obtener mediciones α y γ. β normalmente se mide con índice de similitud o disimilitud.

1.3 Relevancia

El poder medir la diversidad permite entender patrones de distribución de especies (p.ej., zonas tropicales vs polares), poner a prueba hipótesis ecológicas (p.ej., sobre el estado de conservación / perturbación), crear líneas base (p.ej., conocer el número de especies presentes en una región), proveer información de prioridades de conservación (p.ej., proteger zonas más biodiversas), entre otras.

#Índices tradicionales

Índices sobre qué tan heterogénea es una comunidad. Normalmente tratan de resumir dos componentes:

  • Número de especies.
  • Abundancia de éstas.

Medidas sobre diversidad incluyen el cálculo de índices “clásicos”:

  • Riqueza: Número de especies en una muestra.

  • Índice de Shannon: Incertidumbre en la identidad de una especie en una muestra. Índice que considera riqueza de especies y dominancia.

\[ D = -\sum_{i=1}^{s} p_i \ln p_i \] Índice de Simpson. Probabilidad de que dos individuos, de una muestra, elegidos al azar sean de especies distintas. Índice que considera riqueza de especies y dominancia, pero está más influenciado por la dominancia.

Está el índice de Simpson (o Gini-Simpson).

\[ D \;=\; 1 - \sum_{i=1}^{S} p_i^{\,2} \]

…y el inverso de Simpson:

\[ D \;=\; \frac{1}{\sum_{i=1}^{S} p_i^{\,2}} \]

Principales medidas Riqueza Número de especies en una muestra. Índice de Shannon Incertidumbre en la identidad de una especie en una muestra. Índice que considera riqueza de especies y dominancia.

\[ D = -\sum_{i=1}^{s} p_i \ln p_i \]

  • Curvas de rango abundancia Abundancia de cada especie encontrada en el muestreo.

_ Figuras tomadas de: https://www.davidzeleny.net/anadat-r/doku.php/en:div-ind

Sin embargo, el principal problema con estos índices es que los índices dependen del esfuerzo de muestreo, cuántas especies hay y su abundancia relativa. Entonces qué puede pasar:

  1. Una comunidad puede ser igual de diversa que otra, pero si se muestreó con un menor esfuerzo de muestreo, el índice saldrá menor.
  2. Dos comunidades con el mismo valor del índice de Shannon, pero una puede tener el doble número de especies con diferente abundancia.

Otras métricas que se han plantado como alternativas, basadas en técnicas de remuestreo:

  • Curvas de acumulación de especies.

  • Rarefacción.

_
_

Curvas de acumulación de especies: Permiten simular la diversidad encontrada en función del esfuerzo de muestreo.

Rarefacción: Los índices rarificados se basan en las curvas de acumulación de especies para interpolar el valor de diversidad (modelado) de una comunidad con un esfuerzo de muestreo reducido.

#3Números de Hill

Definición y ventajas

Los números de Hill corresponden a medidas de diversidad que tratan de estandarizar en función del número de especies y su abundancia.

Tratan de abordar el problema de medir la diversidad en comunidades, como un valor que depende del:1)Esfuerzo de muestreo y 2) Cuántas especies hay y su abundancia relativa

_ Figuras tomadas de: https://nsojournals.onlinelibrary.wiley.com/doi/full/10.1111/oik.07202

Su ventaja respecto a los índices de diversidad “tradicionales”:

  1. Interpretables en términos de número de especies.

  2. Cuentan con un exponente que controla la sensibilidad de la diversidad a la abundancia de las especies (q = c(0,1,2)). Más importancia a especies abundantes conforme incrementa el número q.

  • q0: Riqueza de especies. Más sensible a especies raras.
  • q1: Similar al índice de Shannon, pero expresado en número de especies (comunes). Punto intermedio.
  • q2: Similar al índice de Simpson, pero expresado en número de especies (comunes). Más sensible a especies comunes.
_
_

Figuras tomadas de: https://www.davidzeleny.net/anadat-r/doku.php/en:div-ind

Ventajas:

  1. Si dos comunidades tienen una proporción similar de especies dominantes, pero distinto número de especies totales, su índice de Shannon o Simpson serán muy similares; pero q1 y q2 no (reflejará la diferencia en número de especies).
  2. Los valores se expresan en número de especies. Modelan una comunidad con determinada diversidad donde todas las especies tienen la misma abundancia.
  3. Permite hacer comparaciones proporcionales en términos de diversidad entre números de Hill de distintas comunidades.

\[ D = \left( \sum_{i=1}^{S} p_i^{\,q} \right)^{\frac{1}{1-q}} \]

Donde: - \(S\): número de especies en la muestra. - \(p_i\): número de individuos de la especie \(i\) entre el total de individuos. - \(q\): exponente del número de Hill.

Otro concepto importante: Coverage.

Es una medida de qué tanto se ha muestrado una comunidad. Coverage crece más lento conforme crece el tamaño de la muestra. Se calcula a partir del número de singletons, doubletons y número total de individuos.

2 Introducción al paquete vegan

El paquete vegan (Vegetation Analysis) es la herramienta más completa en R para análisis de diversidad ecológica. Desarrollado por Jari Oksanen y colaboradores, proporciona funciones especializadas para el cálculo de índices de diversidad, análisis de comunidades y estadística multivariada ecológica.

2.1 Instalación y carga del paquete

# Instalación (solo una vez)
# install.packages("vegan")

# Cargar paquete
library(vegan)
## Loading required package: permute
## Loading required package: lattice
library(dplyr)  # Para manipulación de datos
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)  # Para tablas

# Verificar versión
packageVersion("vegan")
## [1] '2.6.10'

3 Preparación de datos para análisis

3.1 Estructura de datos requerida

Para análisis de diversidad, vegan requiere matrices donde: - Filas: Sitios de muestreo o unidades de observación - Columnas: Especies o taxa - Valores: Abundancias, densidades o presencia/ausencia

# Crear dataset de ejemplo de macroinvertebrados
# Simulando datos reales de campo
set.seed(123)

# Sitios de muestreo
sitios <- paste("Sitio", 1:8, sep = "_")

# Especies comunes de macroinvertebrados acuáticos
especies <- c("Baetis", "Simulium", "Chironomus", "Hydropsyche", 
              "Leptophlebia", "Tipula", "Ephemerella", "Rhithrogena",
              "Glossosoma", "Leuctra", "Perla", "Hemerodromia")

# Crear matriz de abundancias (usando distribución Poisson)
abundancias <- matrix(
  rpois(length(sitios) * length(especies), lambda = 15),
  nrow = length(sitios),
  ncol = length(especies),
  dimnames = list(sitios, especies)
)

# Introducir algunos ceros (ausencias naturales)
abundancias[abundancias < 5] <- 0

# Mostrar la matriz
kable(abundancias, caption = "Matriz de abundancias de macroinvertebrados")
Matriz de abundancias de macroinvertebrados
Baetis Simulium Chironomus Hydropsyche Leptophlebia Tipula Ephemerella Rhithrogena Glossosoma Leuctra Perla Hemerodromia
Sitio_1 12 19 11 13 13 13 20 16 12 13 18 16
Sitio_2 19 16 10 9 13 18 9 19 17 17 17 15
Sitio_3 8 16 13 18 12 14 10 17 14 14 15 21
Sitio_4 15 15 10 18 18 15 15 16 12 16 12 15
Sitio_5 21 12 12 18 14 14 16 18 15 19 20 19
Sitio_6 16 20 14 17 19 14 13 14 14 16 13 12
Sitio_7 10 18 10 17 11 20 13 14 15 13 16 14
Sitio_8 8 14 10 14 13 14 11 11 16 19 14 11

3.2 Variables ambientales asociadas

# Crear variables ambientales para cada sitio
env_data <- data.frame(
  sitio = sitios,
  altitud = c(2650, 2580, 2720, 2490, 2630, 2510, 2670, 2550),
  temperatura = c(16.5, 18.2, 15.8, 19.1, 17.0, 18.8, 16.2, 18.5),
  ph = c(7.2, 6.8, 7.5, 6.9, 7.1, 6.7, 7.4, 6.8),
  oxigeno = c(8.5, 7.2, 9.1, 6.8, 8.0, 7.0, 8.8, 7.3),
  velocidad_corriente = c(0.8, 1.2, 0.6, 1.5, 0.9, 1.3, 0.7, 1.1),
  sustrato = factor(c("Rocoso", "Arenoso", "Rocoso", "Limoso", 
                     "Rocoso", "Arenoso", "Rocoso", "Limoso"))
)

kable(env_data, caption = "Variables ambientales por sitio", digits = 2)
Variables ambientales por sitio
sitio altitud temperatura ph oxigeno velocidad_corriente sustrato
Sitio_1 2650 16.5 7.2 8.5 0.8 Rocoso
Sitio_2 2580 18.2 6.8 7.2 1.2 Arenoso
Sitio_3 2720 15.8 7.5 9.1 0.6 Rocoso
Sitio_4 2490 19.1 6.9 6.8 1.5 Limoso
Sitio_5 2630 17.0 7.1 8.0 0.9 Rocoso
Sitio_6 2510 18.8 6.7 7.0 1.3 Arenoso
Sitio_7 2670 16.2 7.4 8.8 0.7 Rocoso
Sitio_8 2550 18.5 6.8 7.3 1.1 Limoso

4 Índices de Diversidad Alfa

4.1 Riqueza de especies

La riqueza es el número total de especies presentes en una muestra.

# Calcular riqueza de especies
riqueza <- specnumber(abundancias)
print("Riqueza de especies por sitio:")
## [1] "Riqueza de especies por sitio:"
print(riqueza)
## Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8 
##      12      12      12      12      12      12      12      12
# Estadísticos básicos de la riqueza
cat("\nEstadísticos de riqueza:\n")
## 
## Estadísticos de riqueza:
cat("Media:", round(mean(riqueza), 2), "\n")
## Media: 12
cat("Desviación estándar:", round(sd(riqueza), 2), "\n")
## Desviación estándar: 0
cat("Rango:", min(riqueza), "-", max(riqueza), "\n")
## Rango: 12 - 12

4.2 Índice de Shannon (H’)

El índice de Shannon considera tanto la riqueza como la equitabilidad de las especies.

# Calcular índice de Shannon
shannon <- diversity(abundancias, index = "shannon")
print("Índice de Shannon por sitio:")
## [1] "Índice de Shannon por sitio:"
print(round(shannon, 3))
## Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8 
##   2.466   2.454   2.457   2.473   2.469   2.473   2.463   2.461
# Comparar con riqueza
diversidad_shannon <- data.frame(
  sitio = names(shannon),
  riqueza = riqueza,
  shannon = round(shannon, 3)
)

kable(diversidad_shannon, caption = "Riqueza vs Índice de Shannon")
Riqueza vs Índice de Shannon
sitio riqueza shannon
Sitio_1 Sitio_1 12 2.466
Sitio_2 Sitio_2 12 2.454
Sitio_3 Sitio_3 12 2.457
Sitio_4 Sitio_4 12 2.473
Sitio_5 Sitio_5 12 2.469
Sitio_6 Sitio_6 12 2.473
Sitio_7 Sitio_7 12 2.463
Sitio_8 Sitio_8 12 2.461
# Interpretación del índice de Shannon
cat("\nInterpretación del Índice de Shannon:\n")
## 
## Interpretación del Índice de Shannon:
cat("- Valores bajos (< 1.5): Baja diversidad\n")
## - Valores bajos (< 1.5): Baja diversidad
cat("- Valores medios (1.5 - 3.0): Diversidad moderada\n")
## - Valores medios (1.5 - 3.0): Diversidad moderada
cat("- Valores altos (> 3.0): Alta diversidad\n")
## - Valores altos (> 3.0): Alta diversidad

4.3 Índice de Simpson (D)

El índice de Simpson da más peso a las especies dominantes.

# Calcular índice de Simpson
simpson <- diversity(abundancias, index = "simpson")
print("Índice de Simpson por sitio:")
## [1] "Índice de Simpson por sitio:"
print(round(simpson, 3))
## Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8 
##   0.913   0.912   0.912   0.915   0.914   0.915   0.913   0.913
# Calcular inverso de Simpson (1/D)
inv_simpson <- diversity(abundancias, index = "invsimpson")
print("\nInverso del índice de Simpson:")
## [1] "\nInverso del índice de Simpson:"
print(round(inv_simpson, 3))
## Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8 
##  11.550  11.342  11.378  11.721  11.626  11.713  11.490  11.457
# Tabla comparativa
diversidad_completa <- data.frame(
  sitio = names(shannon),
  riqueza = riqueza,
  shannon = round(shannon, 3),
  simpson = round(simpson, 3),
  inv_simpson = round(inv_simpson, 3)
)

kable(diversidad_completa, caption = "Índices de diversidad por sitio")
Índices de diversidad por sitio
sitio riqueza shannon simpson inv_simpson
Sitio_1 Sitio_1 12 2.466 0.913 11.550
Sitio_2 Sitio_2 12 2.454 0.912 11.342
Sitio_3 Sitio_3 12 2.457 0.912 11.378
Sitio_4 Sitio_4 12 2.473 0.915 11.721
Sitio_5 Sitio_5 12 2.469 0.914 11.626
Sitio_6 Sitio_6 12 2.473 0.915 11.713
Sitio_7 Sitio_7 12 2.463 0.913 11.490
Sitio_8 Sitio_8 12 2.461 0.913 11.457

4.4 Equitabilidad (Evenness)

La equitabilidad mide qué tan uniformemente están distribuidas las abundancias entre especies.

# Equitabilidad de Pielou (J')
pielou <- shannon / log(riqueza)
print("Equitabilidad de Pielou por sitio:")
## [1] "Equitabilidad de Pielou por sitio:"
print(round(pielou, 3))
## Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8 
##   0.992   0.987   0.989   0.995   0.993   0.995   0.991   0.991
# Equitabilidad de Simpson
simpson_evenness <- (1/inv_simpson) / riqueza
print("\nEquitabilidad basada en Simpson:")
## [1] "\nEquitabilidad basada en Simpson:"
print(round(simpson_evenness, 3))
## Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8 
##   0.007   0.007   0.007   0.007   0.007   0.007   0.007   0.007
# Tabla final de índices
indices_finales <- data.frame(
  sitio = names(shannon),
  riqueza = riqueza,
  shannon = round(shannon, 3),
  simpson = round(simpson, 3),
  pielou_evenness = round(pielou, 3)
)

kable(indices_finales, caption = "Índices de diversidad alfa completos")
Índices de diversidad alfa completos
sitio riqueza shannon simpson pielou_evenness
Sitio_1 Sitio_1 12 2.466 0.913 0.992
Sitio_2 Sitio_2 12 2.454 0.912 0.987
Sitio_3 Sitio_3 12 2.457 0.912 0.989
Sitio_4 Sitio_4 12 2.473 0.915 0.995
Sitio_5 Sitio_5 12 2.469 0.914 0.993
Sitio_6 Sitio_6 12 2.473 0.915 0.995
Sitio_7 Sitio_7 12 2.463 0.913 0.991
Sitio_8 Sitio_8 12 2.461 0.913 0.991

5 Análisis de rarefacción

La rarefacción permite comparar diversidad entre sitios con diferentes tamaños de muestra.

# Calcular curvas de rarefacción
rarefaccion <- rarecurve(abundancias, step = 10, sample = min(rowSums(abundancias)))
## Warning in rarecurve(abundancias, step = 10, sample =
## min(rowSums(abundancias))): most observed count data have counts 1, but
## smallest count is 8

# Obtener valores de rarefacción estandarizados
rare_std <- rarefy(abundancias, sample = min(rowSums(abundancias)))
## Warning in rarefy(abundancias, sample = min(rowSums(abundancias))): most
## observed count data have counts 1, but smallest count is 8
print("Riqueza rarefactada (estandarizada):")
## [1] "Riqueza rarefactada (estandarizada):"
print(round(rare_std, 1))
## Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8 
##      12      12      12      12      12      12      12      12 
## attr(,"Subsample")
## [1] 155
# Comparar riqueza observada vs rarefactada
comparacion_rare <- data.frame(
  sitio = names(rare_std),
  riqueza_observada = riqueza,
  riqueza_rarefactada = round(rare_std, 1),
  diferencia = round(riqueza - rare_std, 1)
)

kable(comparacion_rare, caption = "Riqueza observada vs rarefactada")
Riqueza observada vs rarefactada
sitio riqueza_observada riqueza_rarefactada diferencia
Sitio_1 Sitio_1 12 12 0
Sitio_2 Sitio_2 12 12 0
Sitio_3 Sitio_3 12 12 0
Sitio_4 Sitio_4 12 12 0
Sitio_5 Sitio_5 12 12 0
Sitio_6 Sitio_6 12 12 0
Sitio_7 Sitio_7 12 12 0
Sitio_8 Sitio_8 12 12 0

6 Análisis de dominancia

6.1 Índices de dominancia

# Índice de dominancia de Berger-Parker
berger_parker <- apply(abundancias, 1, function(x) max(x) / sum(x))
print("Índice de Berger-Parker (dominancia):")
## [1] "Índice de Berger-Parker (dominancia):"
print(round(berger_parker, 3))
## Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8 
##   0.114   0.106   0.122   0.102   0.106   0.110   0.117   0.123
# Especies más dominantes por sitio
especies_dominantes <- apply(abundancias, 1, function(x) {
  nombres_especies <- colnames(abundancias)
  nombres_especies[which.max(x)]
})

dominancia_tabla <- data.frame(
  sitio = names(berger_parker),
  especie_dominante = especies_dominantes,
  dominancia_BP = round(berger_parker, 3)
)

kable(dominancia_tabla, caption = "Especies dominantes y índice Berger-Parker")
Especies dominantes y índice Berger-Parker
sitio especie_dominante dominancia_BP
Sitio_1 Sitio_1 Ephemerella 0.114
Sitio_2 Sitio_2 Baetis 0.106
Sitio_3 Sitio_3 Hemerodromia 0.122
Sitio_4 Sitio_4 Hydropsyche 0.102
Sitio_5 Sitio_5 Baetis 0.106
Sitio_6 Sitio_6 Simulium 0.110
Sitio_7 Sitio_7 Tipula 0.117
Sitio_8 Sitio_8 Leuctra 0.123

6.2 Curvas de rango-abundancia

# Función para crear curvas de rango-abundancia
rankabundance_plot <- function(site_data, site_name) {
  abundancias_ordenadas <- sort(site_data[site_data > 0], decreasing = TRUE)
  rango <- 1:length(abundancias_ordenadas)
  
  plot(rango, abundancias_ordenadas, 
       type = "b", 
       log = "y",
       main = paste("Curva rango-abundancia -", site_name),
       xlab = "Rango de especies",
       ylab = "Abundancia (log)",
       pch = 16)
}

# Ejemplo para los primeros 4 sitios
par(mfrow = c(2, 2))
for(i in 1:4) {
  rankabundance_plot(abundancias[i, ], sitios[i])
}

par(mfrow = c(1, 1))

7 Análisis de similaridad entre sitios

7.1 Índices de similaridad

# Calcular matriz de distancias de Bray-Curtis
bray_curtis <- vegdist(abundancias, method = "bray")
print("Matriz de distancias Bray-Curtis (primeros 6x6):")
## [1] "Matriz de distancias Bray-Curtis (primeros 6x6):"
print(as.matrix(bray_curtis)[1:6, 1:6])
##            Sitio_1   Sitio_2   Sitio_3    Sitio_4    Sitio_5    Sitio_6
## Sitio_1 0.00000000 0.1267606 0.1091954 0.09915014 0.11764706 0.11731844
## Sitio_2 0.12676056 0.0000000 0.1282051 0.11797753 0.10875332 0.13573407
## Sitio_3 0.10919540 0.1282051 0.0000000 0.10601719 0.10810811 0.11299435
## Sitio_4 0.09915014 0.1179775 0.1060172 0.00000000 0.09866667 0.06406685
## Sitio_5 0.11764706 0.1087533 0.1081081 0.09866667 0.00000000 0.12105263
## Sitio_6 0.11731844 0.1357341 0.1129944 0.06406685 0.12105263 0.00000000
# Calcular índice de Jaccard (presencia/ausencia)
# Convertir a presencia/ausencia
presencia_ausencia <- abundancias > 0
jaccard <- vegdist(presencia_ausencia, method = "jaccard")
print("\nMatriz de distancias Jaccard (primeros 4x4):")
## [1] "\nMatriz de distancias Jaccard (primeros 4x4):"
print(round(as.matrix(jaccard)[1:4, 1:4], 3))
##         Sitio_1 Sitio_2 Sitio_3 Sitio_4
## Sitio_1       0       0       0       0
## Sitio_2       0       0       0       0
## Sitio_3       0       0       0       0
## Sitio_4       0       0       0       0

8 Especies indicadoras y características

8.1 Análisis de especies características

# Clasificar sitios por altitud para análisis indicador
grupos_altitud <- cut(env_data$altitud, 
                     breaks = c(0, 2600, Inf), 
                     labels = c("Baja", "Alta"))

# Crear tabla de especies por grupo altitudinal
especies_por_grupo <- aggregate(abundancias, 
                               by = list(Altitud = grupos_altitud), 
                               FUN = mean)

print("Abundancia promedio por grupo altitudinal:")
## [1] "Abundancia promedio por grupo altitudinal:"
kable(especies_por_grupo, caption = "Especies por grupo altitudinal", digits = 1)
Especies por grupo altitudinal
Altitud Baetis Simulium Chironomus Hydropsyche Leptophlebia Tipula Ephemerella Rhithrogena Glossosoma Leuctra Perla Hemerodromia
Baja 14.5 16.2 11.0 14.5 15.8 15.2 12.0 15.0 14.8 17.0 14.0 13.2
Alta 12.8 16.2 11.5 16.5 12.5 15.2 14.8 16.2 14.0 14.8 17.2 17.5

9 Análisis de completitud del muestreo

# Estimar riqueza total usando diferentes estimadores
estimadores <- estimateR(abundancias)
print("Estimadores de riqueza:")
## [1] "Estimadores de riqueza:"
print(round(estimadores, 1))
##          Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8
## S.obs         12    12.0    12.0      12      12      12    12.0    12.0
## S.chao1       12    12.0    12.0      12      12      12    12.0    12.0
## se.chao1       0     0.0     0.0       0       0       0     0.0     0.0
## S.ACE        NaN    12.0    12.0      12     NaN     NaN    12.0    12.0
## se.ACE       NaN     1.5     1.3       1     NaN     NaN     1.3     1.3
# Calcular completitud del muestreo
completitud <- riqueza / estimadores["S.chao1", ]
print("\nCompletitud del muestreo (Chao1):")
## [1] "\nCompletitud del muestreo (Chao1):"
print(round(completitud, 3))
## Sitio_1 Sitio_2 Sitio_3 Sitio_4 Sitio_5 Sitio_6 Sitio_7 Sitio_8 
##       1       1       1       1       1       1       1       1
# Tabla resumen de estimadores
resumen_estimadores <- data.frame(
  sitio = colnames(estimadores),
  S_obs = estimadores["S.obs", ],
  S_chao1 = round(estimadores["S.chao1", ], 1),
  S_ace = round(estimadores["S.ACE", ], 1),
  completitud = round(completitud, 3)
)

kable(resumen_estimadores, caption = "Estimadores de riqueza y completitud")
Estimadores de riqueza y completitud
sitio S_obs S_chao1 S_ace completitud
Sitio_1 Sitio_1 12 12 NaN 1
Sitio_2 Sitio_2 12 12 12 1
Sitio_3 Sitio_3 12 12 12 1
Sitio_4 Sitio_4 12 12 12 1
Sitio_5 Sitio_5 12 12 NaN 1
Sitio_6 Sitio_6 12 12 NaN 1
Sitio_7 Sitio_7 12 12 12 1
Sitio_8 Sitio_8 12 12 12 1

10 Relación diversidad-ambiente

10.1 Correlaciones con variables ambientales

# Crear dataframe con índices y variables ambientales
datos_completos <- data.frame(
  env_data,
  riqueza = riqueza,
  shannon = shannon,
  simpson = simpson,
  pielou = pielou
)

# Calcular correlaciones
correlaciones <- cor(datos_completos[, c("altitud", "temperatura", "ph", 
                                        "oxigeno", "velocidad_corriente", 
                                        "riqueza", "shannon", "simpson")],
                    use = "complete.obs")
## Warning in cor(datos_completos[, c("altitud", "temperatura", "ph", "oxigeno", :
## the standard deviation is zero
print("Matriz de correlaciones:")
## [1] "Matriz de correlaciones:"
kable(round(correlaciones, 3), caption = "Correlaciones entre variables")
Correlaciones entre variables
altitud temperatura ph oxigeno velocidad_corriente riqueza shannon simpson
altitud 1.000 -0.985 0.908 0.972 -0.974 NA -0.535 -0.575
temperatura -0.985 1.000 -0.939 -0.991 0.974 NA 0.397 0.443
ph 0.908 -0.939 1.000 0.954 -0.880 NA -0.297 -0.336
oxigeno 0.972 -0.991 0.954 1.000 -0.977 NA -0.384 -0.438
velocidad_corriente -0.974 0.974 -0.880 -0.977 1.000 NA 0.456 0.514
riqueza NA NA NA NA NA 1 NA NA
shannon -0.535 0.397 -0.297 -0.384 0.456 NA 1.000 0.995
simpson -0.575 0.443 -0.336 -0.438 0.514 NA 0.995 1.000
# Correlaciones significativas con diversidad
cor_test_shannon_temp <- cor.test(datos_completos$shannon, datos_completos$temperatura)
cat("\nCorrelación Shannon vs Temperatura:\n")
## 
## Correlación Shannon vs Temperatura:
cat("r =", round(cor_test_shannon_temp$estimate, 3))
## r = 0.397
cat(", p-valor =", round(cor_test_shannon_temp$p.value, 4), "\n")
## , p-valor = 0.3299

11 Funciones útiles adicionales en vegan

11.1 Funciones de utilidad

# Otras funciones importantes de vegan:

# 1. Transformaciones de datos
decostand(abundancias, method = "total")      # Relativizar por totales
decostand(abundancias, method = "max")        # Relativizar por máximo
decostand(abundancias, method = "hellinger")  # Transformación Hellinger

# 2. Análisis de ordenación
rda(abundancias ~ temperatura + ph, data = env_data)  # RDA
cca(abundancias)                              # Análisis de Correspondencia

# 3. Análisis de agrupamiento
hclust(bray_curtis, method = "average")       # Clustering jerárquico

# 4. Pruebas de permutación
adonis2(abundancias ~ temperatura, data = env_data)  # PERMANOVA

# 5. Análisis de beta diversidad
betadiver(abundancias, method = "w")          # Índices de beta diversidad

12 Interpretación ecológica

12.1 Patrones encontrados en los datos

# Resumen de patrones principales
cat("RESUMEN DE ANÁLISIS DE DIVERSIDAD ALFA\n")
## RESUMEN DE ANÁLISIS DE DIVERSIDAD ALFA
cat("=====================================\n\n")
## =====================================
cat("1. RIQUEZA DE ESPECIES:\n")
## 1. RIQUEZA DE ESPECIES:
cat("   - Promedio:", round(mean(riqueza), 1), "especies por sitio\n")
##    - Promedio: 12 especies por sitio
cat("   - Rango:", min(riqueza), "-", max(riqueza), "especies\n\n")
##    - Rango: 12 - 12 especies
cat("2. DIVERSIDAD SHANNON:\n")
## 2. DIVERSIDAD SHANNON:
cat("   - Promedio:", round(mean(shannon), 2), "\n")
##    - Promedio: 2.46
cat("   - Sitio más diverso:", names(which.max(shannon)), 
    "(H' =", round(max(shannon), 2), ")\n")
##    - Sitio más diverso: Sitio_6 (H' = 2.47 )
cat("   - Sitio menos diverso:", names(which.min(shannon)), 
    "(H' =", round(min(shannon), 2), ")\n\n")
##    - Sitio menos diverso: Sitio_2 (H' = 2.45 )
cat("3. EQUITABILIDAD:\n")
## 3. EQUITABILIDAD:
cat("   - Promedio:", round(mean(pielou, na.rm = TRUE), 2), "\n")
##    - Promedio: 0.99
cat("   - Interpretación: Las comunidades muestran")
##    - Interpretación: Las comunidades muestran
if(mean(pielou, na.rm = TRUE) > 0.7) {
  cat(" alta equitabilidad\n")
} else if(mean(pielou, na.rm = TRUE) > 0.5) {
  cat(" equitabilidad moderada\n")
} else {
  cat(" baja equitabilidad (dominancia alta)\n")
}
##  alta equitabilidad
cat("\n4. PATRONES AMBIENTALES:\n")
## 
## 4. PATRONES AMBIENTALES:
# Buscar la correlación más fuerte con Shannon
cors_amb <- cor(datos_completos[, c("shannon", "temperatura", "ph", 
                                   "oxigeno", "altitud")], 
                use = "complete.obs")
max_cor <- which.max(abs(cors_amb["shannon", -1]))
var_max <- names(cors_amb["shannon", -1])[max_cor]
valor_cor <- cors_amb["shannon", var_max]

cat("   - Variable más correlacionada con diversidad:", var_max, 
    "(r =", round(valor_cor, 3), ")\n")
##    - Variable más correlacionada con diversidad: altitud (r = -0.535 )

13 Recomendaciones para el muestreo

# Análisis de suficiencia del muestreo
cat("RECOMENDACIONES PARA MUESTREO:\n")
## RECOMENDACIONES PARA MUESTREO:
cat("=============================\n\n")
## =============================
# Basado en completitud promedio
completitud_promedio <- mean(completitud, na.rm = TRUE)
cat("1. COMPLETITUD DEL MUESTREO:\n")
## 1. COMPLETITUD DEL MUESTREO:
cat("   - Completitud promedio:", round(completitud_promedio * 100, 1), "%\n")
##    - Completitud promedio: 100 %
if(completitud_promedio < 0.8) {
  cat("   - RECOMENDACIÓN: Incrementar esfuerzo de muestreo\n")
  cat("   - Se estiman", round((1/completitud_promedio - 1) * 100, 0), 
      "% más especies por encontrar\n")
} else {
  cat("   - EVALUACIÓN: Muestreo adecuado\n")
}
##    - EVALUACIÓN: Muestreo adecuado
# Sitios con baja completitud
sitios_baja_completitud <- names(completitud)[completitud < 0.7]
if(length(sitios_baja_completitud) > 0) {
  cat("\n2. SITIOS PRIORITARIOS PARA RE-MUESTREO:\n")
  for(sitio in sitios_baja_completitud) {
    cat("   -", sitio, ": completitud =", 
        round(completitud[sitio] * 100, 1), "%\n")
  }
}

14 Bibliografía y recursos

Paquetes utilizados: - Oksanen, J. et al. (2022). vegan: Community Ecology Package. R package version 2.6-4.

Referencias clave: - Magurran, A.E. (2004). Measuring Biological Diversity. Blackwell Publishing. - Gotelli, N.J. & Colwell, R.K. (2001). Quantifying biodiversity. Ecology Letters, 4, 379-391. - Legendre, P. & Legendre, L. (2012). Numerical Ecology. 3rd edition. Elsevier.

Recursos adicionales: - Tutorial vegan: https://cran.r-project.org/web/packages/vegan/vignettes/intro-vegan.pdf - Análisis multivariado en ecología: https://www.davidzeleny.net/anadat-r/


Información de la sesión:

sessionInfo()
## R version 4.3.3 (2024-02-29 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 11 x64 (build 26100)
## 
## Matrix products: default
## 
## 
## locale:
## [1] LC_COLLATE=Spanish_Spain.utf8  LC_CTYPE=Spanish_Spain.utf8   
## [3] LC_MONETARY=Spanish_Spain.utf8 LC_NUMERIC=C                  
## [5] LC_TIME=Spanish_Spain.utf8    
## 
## time zone: America/Bogota
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] knitr_1.50     dplyr_1.1.4    vegan_2.6-10   lattice_0.22-6 permute_0.9-7 
## 
## loaded via a namespace (and not attached):
##  [1] vctrs_0.6.5       nlme_3.1-164      cli_3.6.2         rlang_1.1.3      
##  [5] xfun_0.52         generics_0.1.4    jsonlite_1.8.8    glue_1.7.0       
##  [9] htmltools_0.5.8.1 sass_0.4.9        rmarkdown_2.29    grid_4.3.3       
## [13] tibble_3.2.1      evaluate_0.23     jquerylib_0.1.4   MASS_7.3-60.0.1  
## [17] fastmap_1.1.1     yaml_2.3.8        lifecycle_1.0.4   cluster_2.1.6    
## [21] compiler_4.3.3    pkgconfig_2.0.3   mgcv_1.9-1        rstudioapi_0.16.0
## [25] digest_0.6.35     R6_2.6.1          tidyselect_1.2.1  pillar_1.11.0    
## [29] parallel_4.3.3    splines_4.3.3     magrittr_2.0.3    bslib_0.7.0      
## [33] Matrix_1.6-5      tools_4.3.3       cachem_1.0.8