Diplomado: MANEJO DE ECOSISTEMAS MARINOS COSTEROS DEL CARIBE
Programa: Biología — Universidad de La Guajira
Facultad: Ciencias Básicas y Aplicadas
Docente: Cristian Granados-Martínez PhD.
En la Parte 4 aprendimos a calcular riqueza (S), Shannon (H’), Simpson (D) y Pielou (J’). Aunque útiles, estos índices tienen dos limitaciones importantes:
Dependen del esfuerzo de muestreo. Un sitio con más individuos registrados tenderá a mostrar mayor diversidad, aunque la comunidad real sea igual de diversa que otra menos muestreada.
No son directamente comparables entre sí. H’ mide “bits de información” y D mide una probabilidad — son escalas distintas que no se pueden comparar en términos de cuánto más diversa es una comunidad respecto a otra.
Los números de Hill (\(^qD\)) resuelven ambos problemas. Expresan la diversidad como un número efectivo de especies: el número de especies igualmente abundantes que producirían el mismo nivel de diversidad que la comunidad observada. Esto los hace:
\[^qD = \left(\sum_{i=1}^{S} p_i^q\right)^{\frac{1}{1-q}}\]
Donde \(p_i\) es la proporción de individuos de la especie \(i\) y \(q\) es el orden de diversidad que controla la sensibilidad a las especies raras vs. comunes.
| Orden | Equivale a | Sensible a |
|---|---|---|
| q = 0 | Riqueza de especies (S) | Todas las especies por igual — muy sensible a raras |
| q = 1 | e^H’ (exponencial del Shannon) | Especies comunes — punto intermedio |
| q = 2 | 1/D (inverso de Simpson) | Especies dominantes — insensible a raras |
💡 Regla práctica: si \(^0D \gg ^2D\), la comunidad tiene muchas especies raras y pocas dominantes. Si \(^0D \approx ^2D\), la comunidad es equitativa.
# Ejecuten este bloque UNA SOLA VEZ
install.packages(c("iNEXT", "vegan", "tidyverse", "knitr", "ggpubr"))# Cargar al inicio de cada sesión
library(iNEXT) # Números de Hill + curvas de rarefacción/extrapolación
library(vegan) # Índices clásicos para comparación
library(tidyverse) # Manipulación de datos y gráficos
library(knitr) # Tablas formateadas
library(ggpubr) # Gráficos adicionales
cat("iNEXT:", as.character(packageVersion("iNEXT")), "\n")## iNEXT: 3.0.1
## vegan: 2.6.10
Usamos dos conjuntos complementarios para ilustrar el análisis con números de Hill:
set.seed(2026)
# ── Peces arrecifales ─────────────────────────────────────────────────────────
especies_peces <- c(
"Acanthurus bahianus", "Sparisoma viride",
"Haemulon sciurus", "Epinephelus guttatus",
"Stegastes partitus", "Lutjanus apodus",
"Cephalopholis cruentata", "Holocanthus tricolor",
"Pomacanthus paru", "Chaetodon capistratus",
"Bodianus rufus", "Thalassoma bifasciatum",
"Scarus iserti", "Abudefduf saxatilis",
"Gramma loreto"
)
arrecife <- matrix(
c(22, 18, 15, 8, 25, 10, 6, 5, 4, 14, 9, 20, 12, 30, 3,
19, 20, 12, 6, 22, 8, 5, 4, 3, 12, 7, 18, 10, 28, 2,
8, 5, 3, 1, 10, 2, 1, 0, 0, 4, 2, 7, 3, 45, 0,
6, 4, 2, 1, 8, 1, 1, 0, 0, 3, 1, 5, 2, 48, 0),
nrow = 4, byrow = TRUE,
dimnames = list(
c("Tayrona_1", "Tayrona_2", "Vela_1", "Vela_2"),
especies_peces
)
)
# ── Macroinvertebrados de manglar ─────────────────────────────────────────────
manglar <- matrix(
c(161, 3, 44, 55, 0, 212, 4, 27, 48,
357, 0, 0, 185, 2, 22, 0, 30, 767),
nrow = 2, byrow = TRUE,
dimnames = list(
c("Lluvias", "Seca"),
c("Aratus_pisonii", "Callinectes_bocourti",
"Cardisoma_guanhumi", "Goniopsis_cruentata",
"Marisa_cornuarietis", "Minuca_vocator",
"Polymesoda_arctata", "Pomacea_maculata",
"Vitta_virginea")
)
)
cat("Peces arrecifales: ", nrow(arrecife), "sitios ×", ncol(arrecife), "especies\n")## Peces arrecifales: 4 sitios × 15 especies
## Manglar: 2 estaciones × 9 especies
Antes de usar iNEXT, calculamos los números de Hill paso
a paso para comprender la fórmula y ver cómo se relacionan con los
índices clásicos.
# Función para calcular los tres números de Hill
numeros_hill <- function(x) {
x <- x[x > 0]
p <- x / sum(x)
S <- length(p)
q0 <- S # Riqueza
q1 <- exp(-sum(p * log(p))) # exp(Shannon)
q2 <- 1 / sum(p^2) # 1/Simpson
c(q0 = q0, q1 = round(q1, 3), q2 = round(q2, 3))
}
# Calcular para todos los sitios de arrecife
hill_arrecife <- t(apply(arrecife, 1, numeros_hill))
# Comparar con índices clásicos
clasicos <- data.frame(
Sitio = rownames(arrecife),
Zona = c("Protegida","Protegida","No protegida","No protegida"),
S = specnumber(arrecife),
H_prima = round(diversity(arrecife, index = "shannon"), 3),
D_inv = round(diversity(arrecife, index = "invsimpson"), 2),
q0D = hill_arrecife[,"q0"],
q1D = hill_arrecife[,"q1"],
q2D = hill_arrecife[,"q2"]
)
kable(clasicos,
col.names = c("Sitio", "Zona", "S", "H'", "1/D",
"⁰D (q=0)", "¹D (q=1)", "²D (q=2)"),
caption = "Índices clásicos vs. Números de Hill — peces arrecifales",
align = "c")| Sitio | Zona | S | H’ | 1/D | ⁰D (q=0) | ¹D (q=1) | ²D (q=2) | |
|---|---|---|---|---|---|---|---|---|
| Tayrona_1 | Tayrona_1 | Protegida | 15 | 2.533 | 11.13 | 15 | 12.586 | 11.133 |
| Tayrona_2 | Tayrona_2 | Protegida | 15 | 2.494 | 10.52 | 15 | 12.104 | 10.522 |
| Vela_1 | Vela_1 | No protegida | 12 | 1.791 | 3.59 | 12 | 5.993 | 3.590 |
| Vela_2 | Vela_2 | No protegida | 12 | 1.567 | 2.73 | 12 | 4.792 | 2.727 |
## ══════════════════════════════════════════════════════
## VERIFICACIÓN: Relación entre índices y números de Hill
## ══════════════════════════════════════════════════════
## Sitio: Tayrona_1
## S = 15 → ⁰D = 15 (idénticos)
cat(sprintf(" e^H' = %.3f → ¹D = %.3f (idénticos)\n",
exp(diversity(x, "shannon")), numeros_hill(x)["q1"]))## e^H' = 12.586 → ¹D = 12.586 (idénticos)
cat(sprintf(" 1/D = %.3f → ²D = %.3f (idénticos)\n",
diversity(x, "invsimpson"), numeros_hill(x)["q2"]))## 1/D = 11.133 → ²D = 11.133 (idénticos)
💡 La gran ventaja comparativa: si Tayrona_1 tiene \(^1D = 10.2\) y Vela_1 tiene \(^1D = 5.1\), podemos afirmar que Tayrona_1 es exactamente el doble de diverso en términos de especies comunes. Con H’ = 2.32 vs. H’ = 1.63 esta comparación proporcional no es posible.
El perfil de diversidad grafica \(^qD\) para un rango continuo de valores de q, mostrando cómo varía la diversidad según se le dé más o menos peso a las especies dominantes.
# Calcular perfiles para q de 0 a 3
q_seq <- seq(0, 3, by = 0.1)
colores_sitio <- c(
"Tayrona_1" = "#1F6E8C", "Tayrona_2" = "#2E86AB",
"Vela_1" = "#C0415A", "Vela_2" = "#E07B54"
)
perfil_data <- purrr::map_dfr(rownames(arrecife), function(s) {
x <- arrecife[s, ]
x <- x[x > 0]
p <- x / sum(x)
purrr::map_dfr(q_seq, function(q) {
if (abs(q - 1) < 1e-6) {
qD <- exp(-sum(p * log(p)))
} else {
qD <- sum(p^q)^(1/(1-q))
}
tibble(sitio = s, q = q, qD = qD,
zona = ifelse(grepl("Tayrona", s), "Protegida", "No protegida"))
})
})
ggplot(perfil_data, aes(x = q, y = qD, color = sitio, linetype = zona)) +
geom_line(linewidth = 1.1) +
geom_vline(xintercept = c(0, 1, 2), linetype = "dotted",
color = "gray60", linewidth = 0.5) +
annotate("text", x = c(0, 1, 2), y = max(perfil_data$qD) * 0.98,
label = c("q=0\nRiqueza", "q=1\n≈Shannon", "q=2\n≈Simpson"),
size = 3, hjust = -0.1, color = "gray40") +
scale_color_manual(values = colores_sitio) +
scale_linetype_manual(values = c("Protegida" = "solid",
"No protegida" = "dashed")) +
labs(
title = "Perfil de Diversidad — Peces Arrecifales del Caribe Colombiano",
subtitle = "⁰D = Riqueza | ¹D ≈ Shannon | ²D ≈ Simpson",
x = "Orden de diversidad (q)",
y = "Número efectivo de especies (ᵍD)",
color = "Sitio",
linetype = "Zona"
) +
theme_classic(base_size = 13) +
theme(legend.position = "right")Perfil de diversidad para los cuatro sitios de arrecife. Cuando las curvas no se cruzan, el orden de diversidad es consistente para todos los valores de q.
🔍 ¿Qué buscar en el perfil?
- Curvas que no se cruzan → el orden de diversidad es consistente independientemente del valor de q: un sitio es siempre más diverso.
- Curvas que se cruzan → la conclusión sobre cuál sitio es más diverso depende del orden q elegido (y de cuánto peso se le da a las especies raras vs. dominantes).
iNEXTEl paquete iNEXT (INterpolation and EXTrapolation)
implementa los números de Hill combinados con técnicas de remuestreo
para:
Esto permite comparar comunidades con diferente esfuerzo de muestreo de forma rigurosa y con medidas de incertidumbre.
iNEXT recibe una lista donde cada
elemento es el vector de abundancias (solo valores > 0) de cada
sitio.
# Convertir matriz a lista para iNEXT
# iNEXT solo necesita las abundancias positivas de cada comunidad
lista_arrecife <- lapply(rownames(arrecife), function(s) {
x <- arrecife[s, ]
as.integer(x[x > 0])
})
names(lista_arrecife) <- rownames(arrecife)
# Verificar
cat("Estructura de la lista para iNEXT:\n")## Estructura de la lista para iNEXT:
for (s in names(lista_arrecife)) {
cat(sprintf(" %-12s → %d especies, %d individuos\n",
s, length(lista_arrecife[[s]]), sum(lista_arrecife[[s]])))
}## Tayrona_1 → 15 especies, 201 individuos
## Tayrona_2 → 15 especies, 176 individuos
## Vela_1 → 12 especies, 91 individuos
## Vela_2 → 12 especies, 82 individuos
# Calcular curvas para q = 0, 1 y 2
# endpoint = hasta el doble del tamaño máximo de muestra (extrapolación)
resultado <- iNEXT(
lista_arrecife,
q = c(0, 1, 2),
datatype = "abundance",
endpoint = max(rowSums(arrecife)) * 2,
nboot = 50 # reducido para velocidad; usar 200+ en análisis finales
)
cat("Cálculo completado.\n")## Cálculo completado.
## Sitios analizados: 2
# Extraer estimaciones asintóticas (diversidad máxima estimada)
asint <- resultado$AsyEst
# Redondear columnas numéricas individualmente
asint_tabla <- asint[, c("Assemblage", "Diversity", "Observed",
"Estimator", "s.e.", "LCL", "UCL")]
asint_tabla$Observed <- round(asint_tabla$Observed, 3)
asint_tabla$Estimator <- round(asint_tabla$Estimator, 3)
asint_tabla$s.e. <- round(asint_tabla$s.e., 3)
asint_tabla$LCL <- round(asint_tabla$LCL, 3)
asint_tabla$UCL <- round(asint_tabla$UCL, 3)
kable(asint_tabla,
col.names = c("Sitio", "Orden q", "Observado",
"Estimado asint.", "Error est.", "LC inf.", "LC sup."),
caption = "Estimaciones asintóticas de números de Hill por sitio",
align = "c",
row.names = FALSE)| Sitio | Orden q | Observado | Estimado asint. | Error est. | LC inf. | LC sup. |
|---|---|---|---|---|---|---|
| Tayrona_1 | Species richness | 15.000 | 15.000 | 0.212 | 15.000 | 15.415 |
| Tayrona_1 | Shannon diversity | 12.586 | 13.041 | 0.538 | 11.987 | 14.096 |
| Tayrona_1 | Simpson diversity | 11.133 | 11.727 | 0.787 | 10.185 | 13.269 |
| Tayrona_2 | Species richness | 15.000 | 15.000 | 0.668 | 15.000 | 16.309 |
| Tayrona_2 | Shannon diversity | 12.104 | 12.609 | 0.607 | 11.419 | 13.799 |
| Tayrona_2 | Simpson diversity | 10.522 | 11.127 | 0.749 | 9.660 | 12.594 |
| Vela_1 | Species richness | 12.000 | 12.989 | 2.893 | 12.000 | 18.660 |
| Vela_1 | Shannon diversity | 5.993 | 6.443 | 0.751 | 4.971 | 7.914 |
| Vela_1 | Simpson diversity | 3.590 | 3.696 | 0.581 | 2.557 | 4.835 |
| Vela_2 | Species richness | 12.000 | 15.951 | 7.494 | 12.000 | 30.640 |
| Vela_2 | Shannon diversity | 4.792 | 5.306 | 0.912 | 3.518 | 7.093 |
| Vela_2 | Simpson diversity | 2.727 | 2.786 | 0.508 | 1.791 | 3.782 |
ggiNEXT(resultado,
type = 1, # curva por tamaño de muestra
se = TRUE, # mostrar IC 95%
facet.var = "Order.q") +
scale_color_manual(
values = c("Tayrona_1" = "#1F6E8C", "Tayrona_2" = "#2E86AB",
"Vela_1" = "#C0415A", "Vela_2" = "#E07B54")
) +
scale_fill_manual(
values = c("Tayrona_1" = "#1F6E8C", "Tayrona_2" = "#2E86AB",
"Vela_1" = "#C0415A", "Vela_2" = "#E07B54")
) +
labs(
title = "Curvas de Rarefacción/Extrapolación — Peces Arrecifales",
subtitle = "Caribe colombiano | Línea continua = interpolación | Punteada = extrapolación",
x = "Número de individuos muestreados",
y = "Número efectivo de especies (ᵍD)",
color = "Sitio",
fill = "Sitio"
) +
theme_bw(base_size = 12) +
theme(
legend.position = "bottom",
strip.background = element_rect(fill = "#2C3E50"),
strip.text = element_text(color = "white", face = "bold", size = 11)
)Curvas de rarefacción (línea continua) e interpolación/extrapolación (línea punteada) para los tres órdenes de diversidad. La zona sombreada es el intervalo de confianza al 95%.
La cobertura muestral (sample coverage) es una medida de qué fracción de la diversidad total ha sido registrada. Comparar sitios a igual cobertura es más riguroso que igualar el número de individuos.
ggiNEXT(resultado,
type = 3, # curva por cobertura
se = TRUE,
facet.var = "Order.q") +
scale_color_manual(
values = c("Tayrona_1" = "#1F6E8C", "Tayrona_2" = "#2E86AB",
"Vela_1" = "#C0415A", "Vela_2" = "#E07B54")
) +
scale_fill_manual(
values = c("Tayrona_1" = "#1F6E8C", "Tayrona_2" = "#2E86AB",
"Vela_1" = "#C0415A", "Vela_2" = "#E07B54")
) +
labs(
title = "Diversidad por Cobertura Muestral — Peces Arrecifales",
subtitle = "Comparación estandarizada por cobertura | IC 95%",
x = "Cobertura muestral",
y = "Número efectivo de especies (ᵍD)",
color = "Sitio",
fill = "Sitio"
) +
theme_bw(base_size = 12) +
theme(
legend.position = "bottom",
strip.background = element_rect(fill = "#2C3E50"),
strip.text = element_text(color = "white", face = "bold", size = 11)
)Curvas de rarefacción por cobertura muestral. Comparar sitios a igual cobertura elimina el sesgo del esfuerzo de muestreo.
ggiNEXT(resultado,
type = 2, # perfil por orden q
se = TRUE,
facet.var = "Assemblage") +
scale_color_manual(
values = c("0" = "#2C3E50", "1" = "#2E86AB", "2" = "#E84855")
) +
scale_fill_manual(
values = c("0" = "#2C3E50", "1" = "#2E86AB", "2" = "#E84855")
) +
labs(
title = "Perfil de Diversidad por Orden q",
subtitle = "q=0: Riqueza | q=1: ≈Shannon | q=2: ≈Simpson",
x = "Orden de diversidad (q)",
y = "Número efectivo de especies (ᵍD)",
color = "Orden q",
fill = "Orden q"
) +
theme_bw(base_size = 12) +
theme(
legend.position = "bottom",
strip.background = element_rect(fill = "#2C3E50"),
strip.text = element_text(color = "white", face = "bold", size = 10)
)Perfil de diversidad por orden q para cada sitio. Sitios cuyas curvas no se cruzan son consistentemente más diversos.
Aplicamos el mismo análisis a los datos de macroinvertebrados del manglar (lluvias vs. seca) que ya conocen del taller grupal.
lista_manglar <- lapply(rownames(manglar), function(e) {
x <- manglar[e, ]
as.integer(x[x > 0])
})
names(lista_manglar) <- rownames(manglar)
resultado_manglar <- iNEXT(
lista_manglar,
q = c(0, 1, 2),
datatype = "abundance",
endpoint = max(rowSums(manglar)) * 2,
nboot = 50
)# Estimaciones asintóticas para manglar
asint_m <- resultado_manglar$AsyEst
asint_m_tabla <- asint_m[, c("Assemblage", "Diversity",
"Observed", "Estimator", "s.e.")]
asint_m_tabla$Observed <- round(asint_m_tabla$Observed, 3)
asint_m_tabla$Estimator <- round(asint_m_tabla$Estimator, 3)
asint_m_tabla$s.e. <- round(asint_m_tabla$s.e., 3)
kable(asint_m_tabla,
col.names = c("Estación", "Orden q", "Observado",
"Estimado asint.", "Error est."),
caption = "Números de Hill — macroinvertebrados de manglar",
align = "c",
row.names = FALSE)| Estación | Orden q | Observado | Estimado asint. | Error est. |
|---|---|---|---|---|
| Lluvias | Species richness | 8.000 | 8.000 | 0.331 |
| Lluvias | Shannon diversity | 4.856 | 4.887 | 0.174 |
| Lluvias | Simpson diversity | 3.891 | 3.911 | 0.176 |
| Seca | Species richness | 6.000 | 6.000 | 0.423 |
| Seca | Shannon diversity | 3.021 | 3.027 | 0.061 |
| Seca | Simpson diversity | 2.473 | 2.475 | 0.057 |
ggiNEXT(resultado_manglar,
type = 1,
se = TRUE,
facet.var = "Order.q") +
scale_color_manual(values = c("Lluvias" = "#4E9BB9",
"Seca" = "#E07B54")) +
scale_fill_manual(values = c("Lluvias" = "#4E9BB9",
"Seca" = "#E07B54")) +
labs(
title = "Números de Hill — Macroinvertebrados de Manglar",
subtitle = "Estación de lluvias vs. seca | Caribe colombiano",
x = "Número de individuos muestreados",
y = "Número efectivo de especies (ᵍD)",
color = "Estación",
fill = "Estación"
) +
theme_bw(base_size = 12) +
theme(
legend.position = "bottom",
strip.background = element_rect(fill = "#2C3E50"),
strip.text = element_text(color = "white", face = "bold", size = 11)
)Curvas de rarefacción/extrapolación para macroinvertebrados de manglar en dos estaciones climáticas.
# Construir tabla comparativa completa para peces arrecifales
hill_todos <- t(apply(arrecife, 1, function(x) {
x <- x[x > 0]; p <- x / sum(x)
c(
q0 = length(p),
q1 = round(exp(-sum(p * log(p))), 2),
q2 = round(1 / sum(p^2), 2)
)
}))
tabla_int <- data.frame(
Sitio = rownames(arrecife),
Zona = c("Protegida","Protegida","No protegida","No protegida"),
S = specnumber(arrecife),
H = round(diversity(arrecife, "shannon"), 3),
InvD = round(diversity(arrecife, "invsimpson"), 2),
J = round(diversity(arrecife,"shannon") / log(specnumber(arrecife)), 3),
q0D = hill_todos[,"q0"],
q1D = hill_todos[,"q1"],
q2D = hill_todos[,"q2"]
)
kable(tabla_int,
col.names = c("Sitio", "Zona", "S", "H'", "1/D", "J'",
"⁰D", "¹D", "²D"),
caption = "Comparación integral: índices clásicos y números de Hill",
align = "c")| Sitio | Zona | S | H’ | 1/D | J’ | ⁰D | ¹D | ²D | |
|---|---|---|---|---|---|---|---|---|---|
| Tayrona_1 | Tayrona_1 | Protegida | 15 | 2.533 | 11.13 | 0.935 | 15 | 12.59 | 11.13 |
| Tayrona_2 | Tayrona_2 | Protegida | 15 | 2.494 | 10.52 | 0.921 | 15 | 12.10 | 10.52 |
| Vela_1 | Vela_1 | No protegida | 12 | 1.791 | 3.59 | 0.721 | 12 | 5.99 | 3.59 |
| Vela_2 | Vela_2 | No protegida | 12 | 1.567 | 2.73 | 0.631 | 12 | 4.79 | 2.73 |
Nota de interpretación: observe que S = \(^0D\), e^H’ = \(^1D\) y 1/D = \(^2D\). Los números de Hill unifican los tres índices en una misma escala y permiten comparaciones proporcionales directas.
La completitud muestral (cobertura) indica qué
fracción de la diversidad real ha sido registrada. iNEXT la
calcula automáticamente.
# Extraer datos de cobertura del objeto iNEXT
cobertura <- resultado$iNextEst |>
purrr::map_dfr(function(df) df, .id = "sitio") |>
filter(Method == "Observed") |>
select(sitio, m, SC, qD, qD.LCL, qD.UCL, Order.q)
cobertura_obs <- cobertura |>
filter(Order.q == 0) |>
select(sitio, m, SC) |>
mutate(
SC_pct = paste0(round(SC * 100, 1), " %"),
zona = ifelse(grepl("Tayrona", sitio), "Protegida", "No protegida")
)
kable(cobertura_obs,
col.names = c("Sitio", "N individuos", "Cobertura",
"Cobertura (%)", "Zona"),
caption = "Cobertura muestral observada por sitio",
align = "c")| Sitio | N individuos | Cobertura | Cobertura (%) | Zona |
|---|---|---|---|---|
| size_based | 201 | 1.0000000 | 100 % | No protegida |
| size_based | 176 | 1.0000000 | 100 % | No protegida |
| size_based | 91 | 0.9784998 | 97.8 % | No protegida |
| size_based | 82 | 0.9518144 | 95.2 % | No protegida |
| coverage_based | 201 | 1.0000000 | 100 % | No protegida |
| coverage_based | 176 | 1.0000000 | 100 % | No protegida |
| coverage_based | 91 | 0.9784998 | 97.8 % | No protegida |
| coverage_based | 82 | 0.9518144 | 95.2 % | No protegida |
## ══════════════════════════════════════════════════════
## EVALUACIÓN DE LA COBERTURA MUESTRAL
## ══════════════════════════════════════════════════════
for (i in seq_len(nrow(cobertura_obs))) {
s <- cobertura_obs$sitio[i]
sc <- cobertura_obs$SC[i]
cat(sprintf(" %-12s SC = %.1f %% → ", s, sc * 100))
if (sc >= 0.90) {
cat("Muestreo suficiente ✓\n")
} else if (sc >= 0.75) {
cat("Muestreo aceptable — considerar esfuerzo adicional\n")
} else {
cat("Muestreo insuficiente ⚠ — incrementar esfuerzo\n")
}
}## size_based SC = 100.0 % → Muestreo suficiente ✓
## size_based SC = 100.0 % → Muestreo suficiente ✓
## size_based SC = 97.8 % → Muestreo suficiente ✓
## size_based SC = 95.2 % → Muestreo suficiente ✓
## coverage_based SC = 100.0 % → Muestreo suficiente ✓
## coverage_based SC = 100.0 % → Muestreo suficiente ✓
## coverage_based SC = 97.8 % → Muestreo suficiente ✓
## coverage_based SC = 95.2 % → Muestreo suficiente ✓
## ══════════════════════════════════════════════════════
Reporten siempre los tres órdenes (\(^0D\), \(^1D\), \(^2D\)). Cada uno captura una faceta distinta de la diversidad y los tres juntos ofrecen una imagen completa de la comunidad.
Verifiquen la cobertura muestral antes de comparar sitios. Si la cobertura es inferior al 80%, los estimados asintóticos serán imprecisos.
Usen las curvas de cobertura (tipo 3 en
ggiNEXT) para comparaciones entre sitios con diferente
esfuerzo — son más robustas que las curvas por tamaño de
muestra.
Si las curvas se cruzan en el perfil de diversidad, su conclusión sobre cuál comunidad es más diversa depende de qué orden q prioricen, y deben justificar esa elección ecológicamente.
En ecosistemas marinos del Caribe, los valores de \(^2D\) muy bajos respecto a \(^0D\) (curvas con pendiente pronunciada en el perfil) suelen indicar perturbación: pocas especies dominan porque las condiciones favorecen a los generalistas o a las especies resistentes al estrés.
Calculen manualmente \(^0D\), \(^1D\) y \(^2D\) para la estación de seca del manglar usando la fórmula directamente, sin funciones auxiliares.
# ── COMPLETEN: extraigan las abundancias de la estación seca ──────────────────
x_seca <- as.numeric(manglar["ESTACION", ])
x_seca <- x_seca[x_seca > 0] # eliminar ceros
# ── COMPLETEN: calculen las proporciones ──────────────────────────────────────
p_seca <- x_seca / sum(VECTOR)
# ── COMPLETEN: calculen los tres números de Hill ──────────────────────────────
q0 <- length(p_seca) # Riqueza
q1 <- exp(-sum(VECTOR * log(VECTOR))) # ≈ Shannon
q2 <- 1 / sum(VECTOR^2) # ≈ Simpson
cat("⁰D (q=0):", q0, "→ número de especies\n")
cat("¹D (q=1):", round(q1, 3), "→ especies efectivas comunes\n")
cat("²D (q=2):", round(q2, 3), "→ especies efectivas dominantes\n")
# ── COMPLETEN: interpreten la diferencia entre q0 y q2 ───────────────────────
# ¿Qué indica que q0 sea mucho mayor que q2 en la estación seca?Con los datos de manglar ya cargados, construyan e interpreten las curvas de cobertura para las dos estaciones.
# ── COMPLETEN: construyan las curvas de cobertura (type = 3) ─────────────────
ggiNEXT(resultado_manglar,
type = NUMERO_TIPO, # ¿qué tipo corresponde a cobertura?
se = TRUE,
facet.var = "Order.q") +
scale_color_manual(values = c("Lluvias" = "#4E9BB9",
"Seca" = "#E07B54")) +
scale_fill_manual(values = c("Lluvias" = "#4E9BB9",
"Seca" = "#E07B54")) +
labs(
title = "TITULO DEL GRAFICO",
x = "Cobertura muestral",
y = "Número efectivo de especies (ᵍD)"
) +
theme_bw(base_size = 12)Interpretación: ¿A igual cobertura muestral, qué estación presenta mayor diversidad para cada orden q? ¿Coincide con lo que calcularon en el taller grupal usando índices clásicos?
Construyan el perfil de diversidad (tipo 2 de ggiNEXT)
para el manglar y respondan: ¿las curvas de lluvias y seca se cruzan? Si
es así, ¿qué implica eso para la comparación de diversidad entre
estaciones?
# ── COMPLETEN: perfil de diversidad por orden q ──────────────────────────────
ggiNEXT(resultado_manglar,
type = NUMERO_TIPO, # tipo para perfil por orden q
se = TRUE,
facet.var = "Assemblage") +
labs(
title = "TITULO DEL GRAFICO",
x = "Orden de diversidad (q)",
y = "Número efectivo de especies (ᵍD)"
) +
theme_bw(base_size = 12)Recursos en línea: