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