Las redes de interacciones ecológicas son representaciones gráficas que describen las relaciones entre diferentes grupos de organismos, como plantas y polinizadores, presas y depredadores, o anfitriones y parásitos. Estas redes permiten estudiar la estructura, complejidad y estabilidad de las comunidades biológicas.
Una red bipartita es un tipo especial de red en la que los nodos (especies) se dividen en dos grupos distintos, y las interacciones sólo ocurren entre los grupos, no dentro de ellos. Por ejemplo, en una red planta-polinizador, las interacciones representan visitas de polinizadores a flores, y no hay interacciones entre plantas o entre polinizadores.
El análisis de estas redes ayuda a responder preguntas como:
¿Qué tan conectada está una comunidad?
¿Qué tan especializada es una especie?
¿Existen especies clave o generalistas?
¿Qué tan resiliente es la red ante la pérdida de especies?
El paquete bipartite en R ofrece herramientas para
analizar y visualizar este tipo de redes, proporcionando métricas a
nivel de red y especie que resumen su estructura ecológica.
Empecemos en R
Instalamos el paquete
#Instalar paquetes sino los tienes (para poder instalarlos borrar # al inicio)
# install.packages("bipartite")
library(bipartite)
Recuerda que debe ser una matriz en .csv
#Para usar mis datos (primero cambia la sesión de trabajo a la carpeta donde tienes la matriz)
#mi_red <- read.csv("mi_red.csv", row.names = 1) (debes quitar el # al inicio del renglón)
Para este ejercicio vamos a usar los datos que vienen en
bipartite
data(Safariland)
rede <- Safariland
El análisis a nivel de red permite resumir la estructura general de una red de interacciones en una serie de métricas que describen su organización, complejidad y estabilidad. Estas métricas se calculan considerando todas las interacciones y especies presentes, y permiten comparar redes entre diferentes sitios, tiempos o condiciones ecológicas.
Algunas métricas comunes incluyen:
Connectance: proporción de interacciones realizadas respecto a las posibles.
Web asymmetry: balance entre el número de especies en los dos niveles.
Shannon diversity: diversidad de interacciones.
Interaction evenness: equidad en la distribución de interacciones.
Nestedness y especialización (H2’): grado de estructuración de la red.
Estas métricas son útiles para entender qué tan generalista o especializada es una comunidad, cuán resiliente puede ser ante perturbaciones, y qué patrones emergen en la red como un todo.
# Todos los índices disponibles
#networklevel(rede) (eliminar # del inicio)
# Solo algunos índices específicos
networklevel(rede, index = c("connectance", "nestedness", "modularity", "H2"))
## connectance modularity Q nestedness H2
## 0.1604938 0.4304096 21.0105661 0.8537307
El análisis a nivel de especie permite caracterizar el rol de cada especie dentro de la red de interacciones. En redes bipartitas, se analizan por separado los dos niveles (por ejemplo, plantas y polinizadores), y se calculan métricas que resumen la posición, importancia y comportamiento de cada especie dentro de la red.
Algunas métricas importantes son:
Degree: número de especies con las que interactúa una especie.
Species strength: importancia cuantitativa de una especie según el peso de sus interacciones.
PDI (Paired Difference Index): especialización basada en la preferencia de interacciones.
Closeness y betweenness: centralidad de la especie en la red.
Estas métricas permiten identificar especies clave, como generalistas, especialistas o especies con roles estructurales importantes, lo cual es fundamental para la conservación y manejo de comunidades ecológicas.
specieslevel(rede, index="d")
## $`higher level`
## d
## Policana albopilosa 0.6905693
## Bombus dahlbomii 0.8581794
## Ruizantheda mutabilis 0.1554289
## Trichophthalma amoena 0.8474066
## Syrphus octomaculatus 0.3859789
## Manuelia gayi 0.3202602
## Allograpta.Toxomerus 0.6482363
## Trichophthalma jaffueli 0.2647268
## Phthiria 0.3916793
## Platycheirus1 0.0000000
## Sapromyza.Minettia 0.2000132
## Formicidae3 0.8115396
## Nitidulidae 0.5510016
## Staphilinidae 0.4092484
## Ichneumonidae4 0.9007713
## Braconidae3 0.6165417
## Chalepogenus caeruleus 0.9500994
## Vespula germanica 0.2834746
## Torymidae2 0.8322740
## Phthiria1 0.2000132
## Svastrides melanura 0.3083018
## Sphecidae 0.2000132
## Thomisidae 0.2000132
## Corynura prothysteres 0.1209998
## Ichneumonidae2 0.2834746
## Ruizantheda proxima 0.2834746
## Braconidae2 0.0000000
##
## $`lower level`
## d
## Aristotelia chilensis 0.9613968
## Alstroemeria aurea 0.8043229
## Schinus patagonicus 0.9846607
## Berberis darwinii 0.5619798
## Rosa eglanteria 0.5590405
## Cynanchum diemii 1.0000000
## Ribes magellanicum 0.9036839
## Mutisia decurrens 0.6625752
## Calceolaria crenatiflora 0.9106928
Para estimar otro índice, cambia la “d” por el nombre del índice que quieres estimar. Recurda que va entre comillas.
La robustez de una red ecológica representa su capacidad para resistir la pérdida de especies sin colapsar funcionalmente. En redes bipartitas, este análisis permite simular extinciones progresivas de especies en un nivel (por ejemplo, polinizadores) y observar cuántas especies del otro nivel (por ejemplo, plantas) se ven afectadas como consecuencia.
Este tipo de análisis responde preguntas como:
¿Qué tan sensible es la red a la pérdida de especies clave?
¿Se derrumba rápidamente o resiste múltiples extinciones?
¿La red es más vulnerable a la pérdida de generalistas o especialistas?
En bipartite, la función second.extinct()
permite simular estas pérdidas y calcular la área bajo la curva de
extinción, lo que se interpreta como una medida de robustez: valores
cercanos a 1 indican mayor robustez, mientras que valores bajos indican
alta fragilidad.
Principales argumentos de second.extinct()
#second.extinct(web, participant = "lower", method = "random", nrep = 1, details = FALSE, ...)
| Argumento | Valor por defecto | ¿Qué hace? |
|---|---|---|
web |
– | La matriz de interacciones (tu red). |
participant |
"lower" |
Especifica cuál nivel será eliminado (puede ser "lower"
o "higher"). |
method |
"random" |
Define el orden de extinción: "random",
"degree", "abundance",
"external", etc. |
nrep |
1 |
Número de repeticiones (útil si usas "random"). |
details |
FALSE |
Si es TRUE, devuelve también los datos de extinciones
individuales. |
ext.row |
vector | Solo si usas method = "external", para indicar el orden
personalizado de extinción. |
Ejemplos de uso
#Extinción con repetición aleatoria
rob_random <- second.extinct(rede, participant = "lower", method = "random", nrep = 100)
#Extinción de especies más conectadas
rob_degree <- second.extinct(rede, participant = "lower", method = "degree")
#Para ver el gráfico
slope.bipartite(rob_random, main = "Extinción dirigida por grado", col = "red")
## exponent
## 1.269569
robustness(rob_random)
## [1] 0.4535762
robustness te da el área bajo la curva de extinción, un
valor entre 0 y 1 que representa la robustez de la red.
plotwebLa función plotweb( ) permite visualizar redes bipartitas de forma clara y estructurada. Representa las especies de cada nivel (por ejemplo, plantas y polinizadores) en dos ejes horizontales, conectándolas con líneas que indican interacciones. El grosor y color de las líneas o nodos puede reflejar la intensidad o frecuencia de las interacciones.
plotweb (rede, text_size=0.5, srt=45,higher_color = "darkgreen", lower_color = "red", sorting="normal", arrow = "up.center")
.