Instrucciones Generales

En este documento se encuentra el análisis gráfico y de índices de la red trófica de las lagunas de la Reserva de Humacao. A partir de estos resultados y referencias de la literatura científica, deben responder las preguntas y cumplir con lo pedido para elaborar un informe. Las preguntas se encuentran numeradas, en letras más grandes y resaltadas.

Aunque no es obligatorio, puede realizar el informe usando el código R Markdown y los datos .csv (los puede descargar de MOODLE). Los datos originales (Google Sheets procesados por mi) los puede encontrar en este enlace: Datos Originales

pregunta [1]: Describir, en un párrafo, el hábitat de las lagunas (Santa Teresa y Palmas) de la Reserva de Humacao.

Paquetes necesarios para usar el código

Para el análisis de una red trófica necesitan, en primer lugar, construir una red mediante un paquete adecuado; utilizamos el paquete igraph. Además necesitamos paquetes que calculen algunos parámetros para la evaluación y comparación de las redes tróficas.

library(igraph)
library(fluxweb)
library(NetIndices)

Funciones externas

Necesitamos las funciones externas trophiclevels y plotfw para completar algunos de los análisis. A continuación hay un código oculto que carga las funciones externas; estos códigos se encuentran en el archivo .Rmd en MOODLE.

Traer datos al ambiente R

Dos tipos de archivos serán utilizados para crear la red utilizando el paquete igraph: uno con los enlaces entre consumidor y recurso (por ejemplo: depredador y presa), llamado usualmente links (o edges) y otro con la descripción de las especies (o taxas, o grupos funcionales), llamado usualmente nodes (o info, o vertex).

pregunta[2]: ¿Cuál es una diferencia importante, en términos de su formato, entre el archivo GoogleSheets y los archivos .csv?

# datos al ambiente R en dos objetos
nodes <- read.csv("data/lagunas-nodes.csv", header=T)
links <- read.csv("data/lagunas-links.csv", header=T)

Creación del objeto igraph

El objeto igraph (net) se crea con la función graph_from_data_frame. A partir de este objeto se pueden mostrar los enlaces (edges o links) y los taxones (nodes o vertex). La función str muestra la estructura del objeto igraph.

# create igraph object
net <- graph_from_data_frame(d=links, vertices=nodes, directed=T)
# examine object
# enlaces
E(net)
## + 280/280 edges from 2f7b309 (vertex names):
##  [1] sp085->sp001 sp038->sp002 sp041->sp002 sp123->sp002 sp041->sp004
##  [6] sp006->sp007 sp059->sp007 sp008->sp008 sp022->sp008 sp059->sp008
## [11] sp059->sp008 sp038->sp011 sp059->sp011 sp092->sp011 sp092->sp013
## [16] sp041->sp014 sp069->sp014 sp085->sp015 sp085->sp016 sp093->sp017
## [21] sp059->sp018 sp069->sp020 sp070->sp020 sp069->sp019 sp070->sp019
## [26] sp038->sp021 sp071->sp021 sp085->sp021 sp069->sp022 sp070->sp022
## [31] sp092->sp022 sp059->sp023 sp059->sp024 sp059->sp025 sp092->sp025
## [36] sp022->sp026 sp059->sp026 sp064->sp026 sp092->sp026 sp096->sp026
## [41] sp085->sp027 sp059->sp028 sp092->sp028 sp070->sp029 sp038->sp030
## [46] sp059->sp030 sp071->sp030 sp069->sp030 sp008->sp031 sp059->sp031
## + ... omitted several edges
# nodos (especies)
V(net)
## + 125/125 vertices, named, from 2f7b309:
##   [1] sp001 sp002 sp003 sp004 sp005 sp006 sp007 sp008 sp009 sp010 sp011 sp012
##  [13] sp013 sp014 sp015 sp016 sp017 sp018 sp019 sp020 sp021 sp022 sp023 sp024
##  [25] sp025 sp026 sp027 sp028 sp029 sp030 sp031 sp032 sp033 sp034 sp035 sp036
##  [37] sp037 sp038 sp039 sp040 sp041 sp042 sp043 sp044 sp045 sp046 sp047 sp048
##  [49] sp049 sp050 sp051 sp052 sp053 sp054 sp055 sp056 sp057 sp058 sp059 sp060
##  [61] sp061 sp062 sp063 sp064 sp065 sp066 sp067 sp068 sp069 sp070 sp071 sp072
##  [73] sp073 sp074 sp075 sp076 sp077 sp078 sp079 sp080 sp081 sp082 sp083 sp084
##  [85] sp085 sp086 sp087 sp088 sp089 sp090 sp091 sp092 sp093 sp094 sp095 sp096
##  [97] sp097 sp098 sp099 sp100 sp101 sp102 sp103 sp104 sp105 sp106 sp107 sp108
## [109] sp109 sp110 sp111 sp112 sp113 sp114 sp115 sp116 sp117 sp118 sp119 sp120
## + ... omitted several vertices
# tipo de objeto
str(net)
## Class 'igraph'  hidden list of 10
##  $ : num 125
##  $ : logi TRUE
##  $ : num [1:280] 84 37 40 122 40 5 58 7 21 58 ...
##  $ : num [1:280] 0 1 1 1 3 6 6 7 7 7 ...
##  $ : num [1:280] 199 240 198 70 82 87 100 126 5 7 ...
##  $ : num [1:280] 0 1 2 3 4 5 6 7 8 10 ...
##  $ : num [1:126] 0 0 0 2 3 8 9 9 20 25 ...
##  $ : num [1:126] 0 1 4 4 5 5 5 7 11 11 ...
##  $ :List of 4
##   ..$ : num [1:3] 1 0 1
##   ..$ : Named list()
##   ..$ :List of 4
##   .. ..$ name            : chr [1:125] "sp001" "sp002" "sp003" "sp004" ...
##   .. ..$ SpName          : chr [1:125] "aguila_pescadora" "Alevines" "algas" "almejas" ...
##   .. ..$ GrupoTax        : chr [1:125] "Aves" "Peces" "Plantas" "Moluscos" ...
##   .. ..$ TipoAlimentacion: chr [1:125] "carnivoro" "omnivoro" "autotrofo" "herbivoro" ...
##   ..$ : list()
##  $ :<environment: 0x15bf3ff70>

Gráfica usando los comandos de igraph

El manual de igraph describe diversas formas de graficar la red a partir del objeto igraph (en este caso: net). En nuestro caso tenemos una gráfica con los nombres de los taxones e identificados según su tipo de alimentación: verde: autótrofos, rojo: carnívoros, gris: descomponedores, amarillo: herbívoros, negro: materia orgánica y marrón: omnívoros.

## colores según tipo de alimentación
levels(as.factor(nodes$TipoAlimentacion))
## [1] "autotrofo"     "carnivoro"     "descomponedor" "herbivoro"    
## [5] "MO"            "omnivoro"
colrs <- c("green", "red", "gray", "yellow", "black", "brown")
V(net)$color <- colrs[as.factor(V(net)$TipoAlimentacion)]
plot(net, vertex.label=V(net)$SpName, 
     vertex.label.cex=.7, 
     vertex.color=V(net)$color,
     edge.width=0.3, 
     edge.arrow.size=0.2)

FIGURA 1. Red de taxones recursos-consumidores, en las lagunas de la Reserva de Humacao. Esta gráfica no muestra niveles tróficos.

Preguntas sobre la FIGURA 1:

pregunta[3]: ¿Cuáles dos tipos de alimentación predominan en esta red trófica?

pregunta[4]: ¿Cuál es una diferencia entre los taxones que se encuentran en el centro de la gráfica y los que están en la periferia?

Gráfica circular

Otra manera de mostrar gráficamente la red trófica, es mediante una gráfica circular. En este tipo de gráfica podemos detectar nodos (taxones) que están muy conectados.

# Matriz de adyacencia
charca.graph<-graph.edgelist(as.matrix(links))
charca.adjmatrix<-get.adjacency(charca.graph,sparse=F)
# gráfica circular
plot.igraph(charca.graph,
            vertex.label=V(net)$SpNumber,
            vertex.label.font=1,
            vertex.label.cex=0.5,
            vertex.size=0.1,
            edge.arrow.size=.25,
            layout=layout.circle)

FIGURA 2. Gráfica circular de enlaces entre los nodos de recursos y consumidores en las lagunas de la Reserva de Humacao.

pregunta[5]: Según la FIGURA 2, ¿cuáles taxones (nodos) están más conectados?

pregunta[6]: ¿Qué significan los bucles fuera del círculo?

Gráfica de la matriz de interacciones

La matriz de interacciones o de adyacencia se puede graficar con las columnas como consumidores y las filas como los recursos. Mientras más puntos se alineen de manera horizontal, indica que el recurso de esa fila es altamente consumido.

# matriz de interacciones
netmatrix <- get.adjacency(net, sparse=F)
# mapa de calor de interacciones: columna = consumidor, fila = recurso
heatmap(netmatrix, Rowv=NA, Colv=NA, labRow = nodes[[2]], labCol = nodes[[2]], scale="none", cexRow=0.2, cexCol = 0.2)

FIGURA 3. Matriz de interacciones de recurso-consumidor. Las interacciones son desde los consumidores en el eje horizontal (columnas) a los recursos (eje vertical o filas).

pregunta[7]: Según la FIGURA 3, ¿cuáles son los recursos más utilizados por los consumidores?

pregunta[8]: Explica cómo llegas a la respuesta anterior.

Gráfica con escala de niveles tróficos

A continuación construimos una gráfica especial para representar la red trófica. Esta gráfica es diferente a las anteriores por la distribución de los taxones (nodos) de acuerdo a su nivel trófico (eje vertical). Los nodos poseen un color de acuerdo a su tipo de alimentación (ver arriba) y el tamaño depende de la cantidad de enlaces que poseen.

# niveles tróficos de los taxones
troph.charca<-TrophInd(charca.adjmatrix)
levels(as.factor(nodes$TipoAlimentacion))
## [1] "autotrofo"     "carnivoro"     "descomponedor" "herbivoro"    
## [5] "MO"            "omnivoro"
colrs <- c("green", "red", "gray", "yellow", "black", "brown")
V(net)$color <- colrs[as.factor(V(net)$TipoAlimentacion)]
plotfw(net, col=V(net)$color,
       rescale = TRUE,
       lab=V(net)$name,
       labcex=0.4,
       edge.width=0.3, 
       edge.arrow.size=0.03)

FIGURA 4. Gráfica de la red trófica de las lagunas de la Reserva de Humacao. La escala vertical indica el nivel trófico de los taxones, con un valor de 1 para los taxones basales. La gráfica muestra mediante colores (indicados arriba) el tipo de alimentación de cada taxón; el tamaño del nodo representa la cantidad de interacciones de ese nodo.

pregunta[9]: A partir de la FIGURA 4, ¿cuántos niveles tróficos puede identificar?

pregunta[10]: ¿Cuál es el nivel trófico del taxón omnívoro con más conexiones?

Índices de la red trófica

A continuación algunos índices que describen la estructura de la red trófica, y que son esenciales para: (1) evaluar el efecto de diferentes escenarios en la estructura de la red trófica, (2) comparar la red trófica con otras redes.

Definición de los índices

Especies basales: las que están en el nivel trófico 1.
Depredadores topes: aquellos consumidores que no son recurso de otras especies.
Omnivoría: fracción de omnivoría en la red trófica.
Riqueza de especies: cantidad de especies (o taxones, o grupos) diferentes en la red trófica; corresponde al número de nodos.
Conectancia: fracción de enlaces en la red trófica, es decir el número de enlaces observados entre el número total de posibles enlaces.
Densidad de enlaces: número de enlaces (“links”) dividido entre la riqueza de especies.
Generalidad: número promedio de recursos por consumidor.
Vulnerabilidad: promedio de consumidores por recurso.
Ruta más corta: promedio de las rutas más cortas entre los nodos (taxones), en unidades de nivel trófico.
Nivel trófico promedio: nivel trófico promedio de la red trófica.

Índices calculados para la red trófica

Especies basales:
algas, anfibios, anolis, aves, bacterias, crustaceos, fitoplankton, hongos, iguana, Mangle_blanco, materia_organica, materia_vegetal, moluscos, plankton, plantas, plantas_acuaticas, protozoarios, ratones, reptiles, zooplankton


Depredadores topes:
aguila_pescadora, Alevines, Anolis_cristatellus, comadreja, avoceta, becasina_comun, boba_parda, boba_patirroja, candelita, Cangrejo_Violinista, Cangrejo_Azul, carpintero, carpintero_PR, chambergo, chango, charran, chiriria, Chopa, chorlos, clerigo, coco_prieto, cocolias, comename, corua, Eleutherodactylus_coqui, falcon, gallaretas, gallinazo_americano, gallinazo_nativo, gallito_amarillo, gallito_sora, garrapatero, garzas, gavilan_cienaga, gavilan_cola_tijera, gaviotas, Gobio, golondrinas, gorriones, guaraguao_colirojo, halcones, Jicotea, jueyes, jui_PR, julian_chivi, martin_pescador_norteno, Martinete, martinetito, monjita_tricolor, mucaro_PR, mucaro_real, napoleon_tejedor, obispo_rojo, pajaro_bobo, paloma_cabeciblanca, paloma_domestica, paloma_turca, Pargo, patos, pelicano_pardo, perdiz, perico_aliamarillo, pitirre_gris, pizpitas, pollo_de_mangle, reina_mora, reinitas, Robalo_comun, rolita, ruisenor, Sabalo, tigua, tijerilla, Tilapia, tordo_lustroso, tortola, tortola_cardosantera, tubeworms, turpial, veteranos, violinista, viuda, viuda_colicinta, yaboa_comun, yaboa_real, zaramago, zorzal_pardo, zumbadores


Omnivoría: 0.7757567


Riqueza de especies: 125


Conectancia: 0.0180645


Densidad de enlaces: 2.144


Generalidad: 2.6666667


Vulnerabilidad: 7.5675676


Ruta más corta: 2.7676129


Nivel trófico promedio: 2.3239247

pregunta[11]: Calcular la fracción de especies basales y de depredadores topes, dividiendo la cantidad de cada grupo entre la riqueza de especies. Comparar con la fracción de omnivoría y discutir.

pregunta[12]: De acuerdo a los valores de generalidad y vulnerabilidad, ¿es esta red vulnerable? Explica tu respuesta.

pregunta[13]: Buscar al menos una referencia de la literatura científica sobre lagunas (de cualquier tipo o lugar) y compara y discute las diferencias o semejanzas.

pregunta[14]: Describe un posible experimento simulado, con cambio en los datos, para re-analizar la red trófica en un nuevo escenario de composición de taxones.

REFERENCES

Kortsch, S.; Frelat, R.; Pecuchet, L.; Olivier, P.; Putnis, I.; Bonsdorff, E.; Ojaveer, H.; Jurgensone, I.; Strake, S.; Rubene, G.; Kruze, E. and Nordström, M. 2022. Introduction to food webs metrics: the Gulf of Riga case study. https://rfrelat.github.io/BalticFoodWeb.html

Kortsch, S., Frelat, R., Pecuchet, L., Olivier, P., Putnis, I., Bonsdorff, E., Ojaveer, H., Jurgensone, I., Strāķe, S., Rubene, G., Krūze, Ē., Nordström, M.C., 2021. Disentangling temporal food web dynamics facilitates understanding of ecosystem functioning. J Anim Ecol 90, 1205–1216. https://doi.org/10.1111/1365-2656.13447