Introducción

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:

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)

Leer la matriz de datos

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

Análisis a nivel de red

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:

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

Análisis a nivel de especie

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:

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.

Robustez

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:

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.

Gráfico usando plotweb

La 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")

.