MAESTRÍA EN GESTIÓN INTEGRAL FRENTE AL CAMBIO CLIMÁTICO
Uso del paquete vegan para cálculos ecológicos Parte 1: Análisis de Diversidad Alfa con 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.
# Instalación (solo una vez)
# install.packages("vegan")
# Cargar paquete
library(vegan)
library(dplyr) # Para manipulación de datos
library(knitr) # Para tablas
# Verificar versión
packageVersion("vegan")
## [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:"
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
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")
| 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
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")
| 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:"
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")
| 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)))
# Obtener valores de rarefacción estandarizados
rare_std <- rarefy(abundancias, sample = min(rowSums(abundancias)))
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")
| 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):"
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")
| 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])
}
par(mfrow = c(1, 1))
# 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
# 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)
| 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:"
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")
| 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")
print("Matriz de correlaciones:")
## [1] "Matriz de correlaciones:"
kable(round(correlaciones, 3), caption = "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
# 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 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 )
# 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")
}
}
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