Instrucciones Generales

En este documento se encuentra el análisis gráfico y de índices de la red trófica de las laguna en la reserva Medio Mundo, Ceiba. A partir de estos resultados y referencias de la literatura científica, deben responder y cumplir con lo pedido en su pregunta del examen.

En el Apéndice encontrarás los datos originales en GoogleSheets, los archivos de datos .csv y el código para cargar los datos y realizar el análisis, si lo necesitas. También incluyo el análisis de la red trófica de la laguna en la Reserva de Humacao, para que puedas comparar los resultados.

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 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).

# datos al ambiente R en dos objetos
nodes <- read.csv("data/lagunasMM-nodes.csv", header=T)
links <- read.csv("data/lagunasMM-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)
## + 788/788 edges from 01ef6f3 (vertex names):
##  [1] sp012 ->sp001 sp025 ->sp001 sp026 ->sp001 sp052 ->sp001 sp0521->sp001
##  [6] sp080 ->sp001 sp081 ->sp001 sp012 ->sp002 sp025 ->sp002 sp026 ->sp002
## [11] sp052 ->sp002 sp056 ->sp002 sp057 ->sp002 sp058 ->sp002 sp059 ->sp002
## [16] sp060 ->sp002 sp061 ->sp002 sp062 ->sp002 sp063 ->sp002 sp066 ->sp002
## [21] sp067 ->sp002 sp073 ->sp002 sp074 ->sp002 sp079 ->sp002 sp080 ->sp002
## [26] sp081 ->sp002 sp082 ->sp002 sp083 ->sp002 sp049 ->sp003 sp051 ->sp003
## [31] sp0521->sp003 sp056 ->sp003 sp078 ->sp003 sp093 ->sp003 sp094 ->sp003
## [36] sp095 ->sp003 sp103 ->sp003 sp051 ->sp004 sp0521->sp004 sp053 ->sp004
## [41] sp054 ->sp004 sp055 ->sp004 sp056 ->sp004 sp076 ->sp004 sp102 ->sp004
## [46] sp049 ->sp005 sp051 ->sp005 sp052 ->sp005 sp056 ->sp005 sp078 ->sp005
## + ... omitted several edges
# nodos (especies)
V(net)
## + 99/99 vertices, named, from 01ef6f3:
##  [1] sp001  sp002  sp003  sp004  sp005  sp006  sp007  sp008  sp009  sp010 
## [11] sp011  sp012  sp013  sp014  sp015  sp016  sp017  sp018  sp019  sp020 
## [21] sp021  sp022  sp023  sp024  sp025  sp026  sp028  sp029  sp030  sp031 
## [31] sp032  sp033  sp034  sp035  sp036  sp037  sp038  sp039  sp040  sp043 
## [41] sp044  sp045  sp046  sp047  sp048  sp049  sp050  sp051  sp0521 sp052 
## [51] sp053  sp054  sp055  sp056  sp057  sp058  sp059  sp060  sp061  sp062 
## [61] sp063  sp064  sp065  sp066  sp067  sp069  sp072  sp073  sp074  sp075 
## [71] sp076  sp077  sp078  sp079  sp080  sp081  sp082  sp083  sp084  sp085 
## [81] sp086  sp087  sp088  sp089  sp091  sp092  sp093  sp094  sp095  sp096 
## [91] sp097  sp098  sp099  sp100  sp101  sp102  sp103  sp104  sp105
# tipo de objeto
str(net)
## Class 'igraph'  hidden list of 10
##  $ : num 99
##  $ : logi TRUE
##  $ : num [1:788] 11 24 25 49 48 74 75 11 24 25 ...
##  $ : num [1:788] 0 0 0 0 0 0 0 1 1 1 ...
##  $ : NULL
##  $ : NULL
##  $ : NULL
##  $ : NULL
##  $ :List of 4
##   ..$ : num [1:3] 1 0 1
##   ..$ : Named list()
##   ..$ :List of 4
##   .. ..$ name            : chr [1:99] "sp001" "sp002" "sp003" "sp004" ...
##   .. ..$ SpName          : chr [1:99] "Playero_blanco" "Ibis_escarlata" "Chiriria_caribena" "Pato_quijada_colorada" ...
##   .. ..$ GrupoTax        : chr [1:99] "Aves" "Aves" "Aves" "Aves" ...
##   .. ..$ TipoAlimentacion: chr [1:99] "omnivoro" "omnivoro" "omnivoro" "herbivoro" ...
##   ..$ : Named list()
##  $ :<environment: 0x131828c18>

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 Medio Mundo. Esta gráfica no muestra niveles tróficos.

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.length=10,
            edge.arrow.width=0,
            layout=layout.circle)

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

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.3, cexCol = 0.3)

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).

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.8,
       edge.arrow.width=0)

FIGURA 4. Gráfica de la red trófica de las lagunas de la Reserva de Medio Mundo. 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.

Í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:
Saltwort, MO, Button_sage, Algas, fitoplankton, Cianobacterias, Palma_de_Coco, Pilosocereus_armatus, Mangle_rojo, Mangle_negro, Mangle_blanco, Mangle_boton, Emajaguilla, Uva_de_playa, hierbas


Depredadores topes:
Ibis_escarlata, Pelicano_pardo, Guaraguao, Garza_real, Garza_blanca, Garza_pechiblanca, Falcon_migratorio, Halcon_peregrino, Falcon_comun, Gallareta, Becasina, American_flamingo, Pajaro_bobo_menor


Omnivoría: 0.523515


Riqueza de especies: 99


Conectancia: 0.0812204


Densidad de enlaces: 7.9090909


Generalidad: 9.3809524


Vulnerabilidad: 9.1627907


Ruta más corta: 2.0799835


Nivel trófico promedio: 2.7030488

REFERENCIAS DE LOS CODIGOS UTILIZADOS

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

APÉNDICE

Análisis de Red Trófica 2023: Lagunas Reserva Humacao

Datos originales en GoogleSheets: Laguna Medio Mundo

Datos en formato .csv: nodes links

Código Rmd de este análisis: Análisis Red Trófica Medio Mundo