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.
Modalidad: Trabajo colaborativo en grupos de 4 personas


1 Instrucciones Generales

📋 Entregable: Al finalizar el taller, deben completar el documento Word adjunto con los gráficos generados (capturas de pantalla o pegados desde RStudio) y las respuestas a todas las preguntas. Ese documento Word lo exportan como PDF y lo entregan al docente junto con el archivo de código.

1.1 Roles del grupo# Instrucciones Generales

1.2 Roles del grupo

Asignen un rol diferente a cada integrante en cada actividad. Los roles rotan en cada sección para que todos practiquen todas las funciones:

Rol Responsabilidad
🖥️ Digitador/a Escribe y ejecuta el código en RStudio
🔍 Revisor/a Verifica errores y consulta la guía de la Parte 4
📊 Intérprete Explica los resultados al grupo
📝 Relator/a Registra conclusiones y las escribe en el documento Word

1.3 Entregables

  1. Archivo .Rmd con todos los bloques de código completados y funcionando
  2. Archivo .html generado con el botón Knit 🧶
  3. Documento Word con las respuestas a todas las preguntas, exportado como PDF

1.4 Criterios de evaluación

Criterio Puntos
Código correcto y funcional 25
Cálculo e interpretación de índices 30
Visualizaciones con formato adecuado 20
Respuestas en el documento Word (PDF entregable) 25
Total 100

2 Preparación del Entorno

2.1 Identificación del grupo

# Ejecuten este bloque UNA SOLA VEZ para instalar los paquetes
install.packages("vegan")
install.packages("tidyverse")
install.packages("knitr")
install.packages("ggpubr")
# Ejecuten este bloque al inicio de cada sesión
library(vegan)
library(tidyverse)
library(knitr)
library(ggpubr)
# ── Completen con los nombres reales de su grupo ──────────────────────────────
integrante_1 <- "Nombre completo"
integrante_2 <- "Nombre completo"
integrante_3 <- "Nombre completo"
integrante_4 <- "Nombre completo"
grupo_numero <- 0   # Reemplacen 0 por el número de su grupo

cat("══════════════════════════════════════════════════\n")
## ══════════════════════════════════════════════════
cat("  TALLER — DIVERSIDAD ALFA EN ECOSISTEMAS MARINOS\n")
##   TALLER — DIVERSIDAD ALFA EN ECOSISTEMAS MARINOS
cat("══════════════════════════════════════════════════\n")
## ══════════════════════════════════════════════════
cat("Grupo N°:", grupo_numero, "\n\n")
## Grupo N°: 0
cat("Integrantes:\n")
## Integrantes:
cat("  1.", integrante_1, "\n")
##   1. Nombre completo
cat("  2.", integrante_2, "\n")
##   2. Nombre completo
cat("  3.", integrante_3, "\n")
##   3. Nombre completo
cat("  4.", integrante_4, "\n")
##   4. Nombre completo

3 Contexto Ecológico

3.1 El ecosistema de manglar

Los datos de este taller provienen de un inventario de macroinvertebrados y gasterópodos registrados en un ecosistema de manglar del Caribe colombiano. El muestreo se realizó en dos estaciones climáticas:

  • Temporada de lluvias: mayor aporte de agua dulce, turbidez alta, salinidad reducida
  • Temporada seca: menor escorrentía, mayor salinidad, aguas más claras

Este tipo de ecosistema es altamente dinámico y alberga especies con adaptaciones especiales a los cambios de salinidad, nivel del agua y disponibilidad de recursos.

3.2 Las especies registradas

Especie Grupo Nombre común
Aratus pisonii Cangrejo Cangrejo del mangle
Callinectes bocourti Cangrejo Jaiba
Cardisoma guanhumi Cangrejo Cangrejo azul / Punto azul
Goniopsis cruentata Cangrejo Cangrejo rojo de manglar
Marisa cornuarietis Gasterópodo Caracol cuerno de carnero
Minuca vocator Cangrejo Cangrejo violinista
Polymesoda arctata Bivalvo Almeja de manglar
Pomacea maculata Gasterópodo Caracol manzana
Vitta virginea Gasterópodo Caracol de manglar

4 Los Datos

4.1 Ingresar la matriz de abundancias

# ── Matriz de abundancias: filas = estaciones, columnas = especies ─────────────
abundancias <- matrix(
  c(161, 3, 44, 55, 0,  212, 4, 27, 48,   # Temporada de lluvias
    357, 0, 0,  185, 2, 22,  0, 30, 767),  # Temporada seca
  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")
  )
)

# Visualizar la matriz
kable(abundancias,
      caption = "Abundancia de macroinvertebrados por estación climática",
      align   = "c")
Abundancia de macroinvertebrados por estación climática
Aratus_pisonii Callinectes_bocourti Cardisoma_guanhumi Goniopsis_cruentata Marisa_cornuarietis Minuca_vocator Polymesoda_arctata Pomacea_maculata Vitta_virginea
Lluvias 161 3 44 55 0 212 4 27 48
Seca 357 0 0 185 2 22 0 30 767

4.2 Exploración inicial

# Total de individuos por estación
cat("Total de individuos por estación:\n")
## Total de individuos por estación:
print(rowSums(abundancias))
## Lluvias    Seca 
##     554    1363
# Total de individuos por especie
cat("\nTotal de individuos por especie (ambas estaciones):\n")
## 
## Total de individuos por especie (ambas estaciones):
print(colSums(abundancias))
##       Aratus_pisonii Callinectes_bocourti   Cardisoma_guanhumi 
##                  518                    3                   44 
##  Goniopsis_cruentata  Marisa_cornuarietis       Minuca_vocator 
##                  240                    2                  234 
##   Polymesoda_arctata     Pomacea_maculata       Vitta_virginea 
##                    4                   57                  815
# ¿Cuántas especies tienen al menos un individuo en cada estación?
cat("\nEspecies presentes en lluvias:", sum(abundancias["Lluvias", ] > 0), "\n")
## 
## Especies presentes en lluvias: 8
cat("Especies presentes en seca:   ", sum(abundancias["Seca", ]    > 0), "\n")
## Especies presentes en seca:    6

4.2.1 📝 Pregunta 1

¿Cuántos individuos se registraron en total en cada estación? ¿En cuál estación hubo más individuos? ¿Y más especies presentes?


5 Actividad 1 — Riqueza de Especies

🔄 Asignen roles antes de comenzar esta actividad.

5.1 Cálculo

# ── COMPLETEN: calculen la riqueza de especies con specnumber() ───────────────
riqueza <- specnumber(NOMBRE_MATRIZ)

cat("Riqueza de especies por estación:\n")
print(riqueza)

5.2 Visualización

# ── COMPLETEN: creen un gráfico de barras de la riqueza por estación ──────────
# Usen los colores: Lluvias = "#4E9BB9", Seca = "#E07B54"

data.frame(
  estacion = names(riqueza),
  S        = as.numeric(riqueza)
) |>
  ggplot(aes(x = VARIABLE_X, y = VARIABLE_Y, fill = VARIABLE_X)) +
  geom_col(alpha = 0.85, width = 0.5) +
  geom_text(aes(label = S), vjust = -0.5, size = 5, fontface = "bold") +
  scale_fill_manual(values = c("Lluvias" = "#4E9BB9", "Seca" = "#E07B54")) +
  labs(
    title = "TITULO DEL GRAFICO",
    x     = NULL,
    y     = "Número de especies (S)"
  ) +
  theme_classic(base_size = 13) +
  theme(legend.position = "none")

5.2.1 📝 Pregunta 2

¿Difiere la riqueza de especies entre las dos estaciones? ¿A qué factores ecológicos del ecosistema de manglar podría atribuirse esta diferencia? Mencionen al menos dos factores.


6 Actividad 2 — Índice de Shannon (H’)

🔄 Roten los roles para esta actividad.

6.1 Cálculo

# ── COMPLETEN: calculen el índice de Shannon ──────────────────────────────────
shannon <- diversity(NOMBRE_MATRIZ, index = "INDICE")

cat("Índice de Shannon (H') por estación:\n")
print(round(shannon, 3))

6.2 Interpretación automática

# ── COMPLETEN: reemplacen NOMBRE_INDICE con el objeto que calcularon arriba ───
for (i in seq_along(NOMBRE_INDICE)) {
  nivel <- ifelse(NOMBRE_INDICE[i] > 3.0, "Alta diversidad",
           ifelse(NOMBRE_INDICE[i] > 1.5, "Diversidad moderada",
                                          "Baja diversidad"))
  cat(sprintf("  %-10s  H' = %.3f  →  %s\n",
              names(NOMBRE_INDICE)[i], NOMBRE_INDICE[i], nivel))
}

6.2.1 📝 Pregunta 3

¿En qué estación es mayor el índice de Shannon? ¿Coincide con la estación de mayor riqueza? Expliquen por qué Shannon y riqueza pueden dar resultados distintos sobre la diversidad de una comunidad.


7 Actividad 3 — Índice de Simpson y Equitabilidad

🔄 Roten los roles para esta actividad.

7.1 Índice de Simpson

# ── COMPLETEN: calculen Simpson y su inverso ──────────────────────────────────
simpson     <- diversity(NOMBRE_MATRIZ, index = "INDICE_SIMPSON")
inv_simpson <- diversity(NOMBRE_MATRIZ, index = "INDICE_INV_SIMPSON")

cat("Índice de Gini-Simpson (D):\n")
print(round(simpson, 3))

cat("\nInverso de Simpson (1/D):\n")
print(round(inv_simpson, 2))

7.2 Equitabilidad de Pielou

# ── COMPLETEN: calculen la equitabilidad de Pielou ────────────────────────────
# Recuerden: J' = H' / ln(S)
pielou <- SHANNON / log(RIQUEZA)

cat("Equitabilidad de Pielou (J'):\n")
print(round(pielou, 3))

7.3 Tabla consolidada de índices

# ── COMPLETEN: construyan la tabla de índices ─────────────────────────────────
indices <- data.frame(
  Estacion = names(riqueza),
  S        = as.numeric(riqueza),
  H        = round(as.numeric(SHANNON), 3),
  D        = round(as.numeric(SIMPSON), 3),
  InvD     = round(as.numeric(INV_SIMPSON), 2),
  J        = round(as.numeric(PIELOU), 3)
)

kable(indices,
      col.names = c("Estación", "Riqueza (S)", "Shannon (H')",
                    "Simpson (D)", "Inv. Simpson", "Pielou (J')"),
      caption   = "Índices de diversidad alfa por estación climática",
      align     = "c")

7.3.1 📝 Pregunta 4

Observen los valores de equitabilidad de Pielou (J’) en cada estación:

a) ¿En cuál estación las abundancias están mejor distribuidas entre especies?

b) La especie Vitta virginea registró 767 individuos en seca y solo 48 en lluvias. ¿Cómo afecta este patrón al índice de Shannon y a la equitabilidad de la estación seca?


8 Actividad 4 — Dominancia y Estructura de la Comunidad

🔄 Roten los roles para esta actividad.

8.1 Índice de Berger-Parker

# ── COMPLETEN: calculen el índice de Berger-Parker ───────────────────────────
berger_parker <- apply(NOMBRE_MATRIZ, 1,
                       function(x) max(x) / sum(x))

especie_dom <- apply(NOMBRE_MATRIZ, 1,
                     function(x) names(which.max(x)))

dominancia <- data.frame(
  Estacion          = names(berger_parker),
  Especie_dominante = especie_dom,
  Berger_Parker     = round(berger_parker, 3)
)

kable(dominancia,
      col.names = c("Estación", "Especie dominante", "Berger-Parker"),
      caption   = "Dominancia por estación — Índice de Berger-Parker",
      align     = "c")

8.2 Curva de rango-abundancia

# ── COMPLETEN: construyan las curvas de rango-abundancia ─────────────────────
# Reemplacen NOMBRE_MATRIZ y COLORES con los valores correctos

estaciones <- rownames(NOMBRE_MATRIZ)

ra_data <- purrr::map_dfr(estaciones, function(e) {
  ab <- sort(NOMBRE_MATRIZ[e, NOMBRE_MATRIZ[e, ] > 0], decreasing = TRUE)
  if (length(ab) == 0) return(NULL)
  data.frame(
    estacion   = e,
    rango      = seq_along(ab),
    abundancia = as.numeric(ab),
    especie    = names(ab)
  )
})

ggplot(ra_data, aes(x = rango, y = abundancia,
                    color = estacion, group = estacion)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 3.5) +
  geom_text(aes(label = especie), vjust = -0.8, size = 2.8,
            check_overlap = TRUE) +
  scale_y_log10() +
  scale_color_manual(values = c("Lluvias" = "#4E9BB9",
                                "Seca"    = "#E07B54")) +
  labs(
    title    = "TITULO DEL GRAFICO",
    subtitle = "Escala logarítmica — cada punto es una especie",
    x        = "Rango de la especie",
    y        = "Abundancia (log₁₀)",
    color    = "Estación"
  ) +
  theme_classic(base_size = 13) +
  theme(legend.position = "bottom")

8.2.1 📝 Pregunta 5

Observen la curva de rango-abundancia:

a) ¿Qué especie ocupa el rango 1 (más abundante) en cada estación? ¿Cambia entre lluvias y seca?

b) ¿En cuál estación la curva es más inclinada? ¿Qué indica esto sobre la estructura de dominancia de la comunidad?

c) Callinectes bocourti, Cardisoma guanhumi y Polymesoda arctata solo aparecen en lluvias. ¿Qué condiciones ambientales de la temporada de lluvias podrían favorecer la presencia de estas especies en el manglar?


9 Actividad 5 — Abundancias Relativas

🔄 Roten los roles para esta actividad.

9.1 Calcular proporciones

# Proporciones relativas por estación — este bloque ya está completo
prop <- prop.table(abundancias, margin = 1) * 100

kable(round(prop, 1),
      caption = "Abundancia relativa (%) por especie y estación",
      align   = "c")
Abundancia relativa (%) por especie y estación
Aratus_pisonii Callinectes_bocourti Cardisoma_guanhumi Goniopsis_cruentata Marisa_cornuarietis Minuca_vocator Polymesoda_arctata Pomacea_maculata Vitta_virginea
Lluvias 29.1 0.5 7.9 9.9 0.0 38.3 0.7 4.9 8.7
Seca 26.2 0.0 0.0 13.6 0.1 1.6 0.0 2.2 56.3

9.2 Visualización con gráfico de barras apiladas

# ── COMPLETEN: construyan un gráfico de barras apiladas con las proporciones ──

as.data.frame(prop) |>
  rownames_to_column("estacion") |>
  pivot_longer(cols      = -estacion,
               names_to  = "especie",
               values_to = "porcentaje") |>
  ggplot(aes(x = VARIABLE_X, y = VARIABLE_Y, fill = VARIABLE_FILL)) +
  geom_col(alpha = 0.85) +
  scale_fill_brewer(palette = "Set3") +
  labs(
    title = "TITULO DEL GRAFICO",
    x     = NULL,
    y     = "Abundancia relativa (%)",
    fill  = "Especie"
  ) +
  theme_classic(base_size = 12) +
  theme(legend.position  = "right",
        legend.text      = element_text(face = "italic", size = 9))

9.2.1 📝 Pregunta 6

Con base en el gráfico de barras apiladas:

a) ¿Qué especie representa el mayor porcentaje de la comunidad en la estación seca? ¿Y en lluvias?

b) ¿Qué cambios notorios se observan en la composición relativa de la comunidad entre estaciones? Mencionen al menos tres especies cuya proporción cambie marcadamente.


10 Actividad 6 — Reto Integrador

🌟 Esta actividad integra todos los conceptos del taller. Trabajen en equipo para completarla.

10.1 Análisis estacional completo

Construyan un único gráfico comparativo que muestre todos los índices calculados (S, H’, D, J’) para las dos estaciones. Usen el código de la Parte 4 de la guía como referencia.

# ── COMPLETEN: construyan el gráfico comparativo de índices ──────────────────
# Pista: usen pivot_longer() para convertir la tabla de índices al formato largo
# y facet_wrap() para dividir por índice

indices |>
  pivot_longer(cols      = c(S, H, D, J),
               names_to  = "Indice",
               values_to = "Valor") |>
  mutate(Indice = recode(Indice,
    S = "ETIQUETA_S",
    H = "ETIQUETA_H",
    D = "ETIQUETA_D",
    J = "ETIQUETA_J"
  )) |>
  ggplot(aes(x = VARIABLE_X, y = VARIABLE_Y, fill = VARIABLE_X)) +
  geom_col(alpha = 0.8, width = 0.5) +
  facet_wrap(~ Indice, scales = "free_y", ncol = 2) +
  scale_fill_manual(values = c("Lluvias" = "#4E9BB9",
                               "Seca"    = "#E07B54")) +
  labs(
    title    = "TITULO DEL GRAFICO",
    subtitle = "Ecosistema de manglar — Caribe colombiano",
    x        = NULL,
    y        = "Valor del índice"
  ) +
  theme_bw(base_size = 12) +
  theme(legend.position  = "none",
        strip.background = element_rect(fill = "#2C3E50"),
        strip.text       = element_text(color = "white", face = "bold"))

10.2 Cálculo manual de verificación

Verifiquen manualmente el índice de Shannon para la estación de lluvias usando la fórmula:

\[H' = -\sum_{i=1}^{S} p_i \ln p_i\]

# ── COMPLETEN: calculen H' manualmente para la estación de lluvias ───────────

# Paso 1: extraer abundancias de lluvias (solo especies presentes)
ab_lluvias <- abundancias["Lluvias", abundancias["Lluvias", ] > 0]
cat("Abundancias en lluvias:\n")
print(ab_lluvias)

# Paso 2: calcular proporciones (pi)
pi_lluvias <- ab_lluvias / sum(ab_lluvias)
cat("\nProporciones (pi):\n")
print(round(pi_lluvias, 4))

# Paso 3: calcular pi * ln(pi) para cada especie
pi_ln_pi <- pi_lluvias * log(pi_lluvias)
cat("\npi × ln(pi) por especie:\n")
print(round(pi_ln_pi, 4))

# Paso 4: sumar y cambiar signo
H_manual <- -sum(pi_ln_pi)
cat("\nH' calculado manualmente:", round(H_manual, 3))
cat("\nH' calculado con diversity():", round(shannon["Lluvias"], 3))
cat("\n¿Coinciden?", isTRUE(all.equal(H_manual, shannon["Lluvias"],
                                      tolerance = 0.001)), "\n")

10.2.1 📝 Conclusión final del grupo

Redacten un párrafo de conclusión (mínimo 120 palabras) que responda:

“Con base en los índices de diversidad alfa calculados, ¿cómo varía la diversidad de la comunidad de macroinvertebrados del manglar entre la temporada de lluvias y la seca? ¿Qué procesos ecológicos o ambientales podrían explicar los patrones observados? ¿En cuál estación consideran que el ecosistema está en mejor estado de conservación y por qué?”


11 Lista de Verificación Final

Antes de hacer clic en Knit y entregar, confirmen que:


Cristian Granados-Martínez PhD. — Programa de Biología, Universidad de La Guajira
Diplomado en Manejo de Ecosistemas Marinos Costeros del Caribe — 2026