MAESTRÍA EN GESTIÓN INTEGRAL FRENTE AL CAMBIO CLIMÁTICO
Análisis de Diversidad Alfa Electiva II: Medición de la diversidad Alfa y Beta en el contexto del cambio climático
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).
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?
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.
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:
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 \]
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:
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”:
Interpretables en términos de número de especies.
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.
Figuras tomadas de: https://www.davidzeleny.net/anadat-r/doku.php/en:div-ind
Ventajas:
\[ 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.
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.
## Loading required package: permute
## Loading required package: lattice
##
## 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
## [1] '2.6.10'
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")| 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 |
# 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)| 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 |
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:"
## 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 de riqueza:
## Media: 12
## Desviación estándar: 0
## Rango: 12 - 12
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:"
## 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")| 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:
## - Valores bajos (< 1.5): Baja diversidad
## - Valores medios (1.5 - 3.0): Diversidad moderada
## - Valores altos (> 3.0): Alta diversidad
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:"
## 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:"
## 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")| 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 |
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:"
## 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:"
## 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")| 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 |
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
## [1] "Riqueza rarefactada (estandarizada):"
## 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")| 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 |
# Í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):"
## 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")| 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 |
# 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])
}# 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):"
## 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):"
## 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
# 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:"
| 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 |
# Estimar riqueza total usando diferentes estimadores
estimadores <- estimateR(abundancias)
print("Estimadores de riqueza:")## [1] "Estimadores de riqueza:"
## 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):"
## 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")| 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 |
# 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
## [1] "Matriz de correlaciones:"
| 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:
## r = 0.397
## , p-valor = 0.3299
# 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## RESUMEN DE ANÁLISIS DE DIVERSIDAD ALFA
## =====================================
## 1. RIQUEZA DE ESPECIES:
## - Promedio: 12 especies por sitio
## - Rango: 12 - 12 especies
## 2. DIVERSIDAD SHANNON:
## - Promedio: 2.46
## - Sitio más diverso: Sitio_6 (H' = 2.47 )
## - Sitio menos diverso: Sitio_2 (H' = 2.45 )
## 3. EQUITABILIDAD:
## - Promedio: 0.99
## - 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
##
## 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 )
## RECOMENDACIONES PARA MUESTREO:
## =============================
# Basado en completitud promedio
completitud_promedio <- mean(completitud, na.rm = TRUE)
cat("1. COMPLETITUD DEL MUESTREO:\n")## 1. COMPLETITUD DEL MUESTREO:
## - 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")
}
}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:
## 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