14  Experimento de Respuesta de Tabla de Vida

Los análisis LTRE (Life Table Response Experiments) permiten descomponer las diferencias observadas en el crecimiento poblacional entre poblaciones, tratamientos o periodos de tiempo en contribuciones demográficas específicas. Este capítulo introduce el enfoque LTRE como una herramienta retrospectiva para identificar los procesos vitales responsables de cambios en la dinámica poblacional.

por : Adriana Ramírez-Martínez y Demetria Mondragón

14.1 Experimentos de respuesta de tablas de vida: un enfoque retrospectivo

Los Life Table Response Experiments (LTRE) constituyen un marco analítico diseñado para explicar por qué dos o más poblaciones, tratamientos o escenarios difieren en su tasa de crecimiento poblacional. A diferencia de los análisis prospectivos de sensibilidad y elasticidad, que evalúan la importancia potencial de cambios hipotéticos en las tasas vitales, los LTRE son análisis retrospectivos que cuantifican la contribución real de las diferencias observadas en los parámetros demográficos.

En este capítulo se presenta el fundamento conceptual de los LTRE, mostrando cómo las diferencias en matrices de proyección pueden descomponerse en contribuciones asociadas a transiciones específicas del ciclo de vida. Se discute la lógica de comparar matrices observadas con una matriz de referencia y cómo esta elección influye en la interpretación biológica de los resultados.

Asimismo, se analiza cómo los LTRE permiten identificar qué procesos demográficos —como supervivencia, crecimiento o fecundidad— explican cambios en el crecimiento poblacional entre condiciones contrastantes. Este capítulo se diferencia de los anteriores porque desplaza el enfoque desde la predicción de efectos potenciales hacia la explicación causal de patrones observados, proporcionando una herramienta clave para interpretar respuestas poblacionales a variación ambiental, manejo o perturbaciones. Los LTRE constituyen un puente conceptual entre la teoría de la dinámica poblacional y su aplicación empírica en estudios comparativos.

14.1.0.1 Librerías de R requeridas para el siguiente módulo

Código
library(tidyverse)
library(Rage)
library(DiagrammeR)
library(popbio)
library(popdemo)
library(latex2exp)

14.2 Introducción a Experimento de Respuesta de Tabla de Vida

La variación en los valores estimados de los parámetros de la matriz son inherentes a la biología. Esa variación puede ser consecuencia de múltiples factores individuales y/o de combinaciones, incluyendo efectos de tiempo, espaciales, genéticos, de tamaño de muestra y por su puesto suerte (Hernández et al., 2024). La variación en los parámetros de la historia de vida de una especie se pueden evaluar a diferentes niveles: genético, demográfico, espacial o temporal. En ecología la variación es la norma ¿Cuál es esta variación? ¿en otra palabras qué es lo que varía? y ¿cómo los individuos responden a las variables bióticas y abióticas? son aspectos importantes para determinar la ecología, evolución y conservación de las especies. La causa de la variación en una población se puede resumir en tres componentes principales: la genética, el efecto del ambiente y la interacción entre ambiente y genética (plasticidad fenotípica) (Sun et al., 2019; Hastings et al., 2021). En general se asume que el tamaño de muestra es lo suficientemente grande para no ser la causa de la variación, pero dentro de un contexto de dinámica poblacional las condiciones en las que se encuentran los individuos en las poblaciones varían, ya sea durante tratamientos manipulados, entre localidades o periodos de tiempo, y por consecuencia los datos que colectamos con diferencias en espacio/tiempo también varían y pudieran tener efecto sobre la matriz de proyección poblacional \(matA\). Por tanto, las entradas (los parámetros) de esa matriz A variarán en tiempo/espacio o experimento y esto tendría un impacto sobre la tasa de crecimiento poblacional \(\lambda\) y en los estimados de dispersión (Intervalo de confianza o credibilidad); (Caswell, 1989a, 2010).

Tomando en cuenta lo anterior un Experimento de Respuesta de Tabla de Vida (ERTV) conocido también como Life Table Response Experiment (LTRE, por sus siglas en inglés) descompone la diferencia o varianza en λ entre múltiples poblaciones o tiempo dentro de las contribuciones de los elementos de la matriz y sus interacciones (Caswell, 1989b). Entonces al realizar este análisis podemos tener una apreciación de cómo los cambios en la matriz de datos recolectados en diferentes tiempos y espacio impactan las tasas vitales y a su vez que causan cambios en el crecimiento intrínseco \(\lambda\) y otros parámetros poblacionales (Caswell, 1989b, 2010).

Desde la aplicación del primer ERTV por (Birch, 1953) en su estudio sobre el efecto de la temperatura, humedad y el alimento sobre tres especies de escarabajos de harina, las aplicaciones de estos análisis han sido variadas con diversos fines en las últimas dos décadas (Caswell, 1989b, 2010). Tanto en diseños fijos en los que se manipulan uno o más factores, como en diseños aleatorios en los que se analizan parámetros demográficos en condiciones naturales no manipuladas a lo largo del tiempo o del espacio (Horvitz, Schemske & Caswell, 1997; Teitel, Klimowski & Campbell, 2016). Los diseños fijos se han utilizado en poblaciones de animales para investigar las consecuencias demográficas de la exposición a contaminantes, la manipulación del alimento o la manipulación de la densidad poblacional (Levin et al., 1996; Hansen, Stenseth & Henttonen, 1999; Oli, Slade & Dobson, 2001). En plantas, los análisis ERTV se han utilizado para evaluar las consecuencias demográficas de la disponibilidad de polinizadores o de la herbívora, competencia, efectos en intensidades de cosecha y de fenómenos naturales e inducidos por el humano (Miriti, Joseph Wright & Howe, 2001; Garcı́a & Ehrlén, 2002; Nordbakken, Rydgren & Økland, 2004; Mondragón, 2009; Davison et al., 2010; Gaoue & Ticktin, 2010; Schmidt et al., 2011; Jacquemyn et al., 2012; Hart-Fredeluces, Ticktin & Lake, 2021).

Desde la aplicación del primer ERTV por (Birch, 1953) en su estudio sobre el efecto de la temperatura, humedad y el alimento sobre tres especies de escarabajos de harina, las aplicaciones de estos análisis han sido variadas con diversos fines en las últimas dos décadas (Caswell, 1989b, 2010). Tanto en diseños fijos en los que se manipulan uno o más factores, como en diseños aleatorios en los que se analizan parámetros demográficos en condiciones naturales no manipuladas a lo largo del tiempo o del espacio (Horvitz, Schemske & Caswell, 1997; Teitel, Klimowski & Campbell, 2016). Los diseños fijos se han utilizado en poblaciones de animales para investigar las consecuencias demográficas de la exposición a contaminantes, la manipulación del alimento o la manipulación de la densidad poblacional (Levin et al., 1996; Hansen, Stenseth & Henttonen, 1999; Oli, Slade & Dobson, 2001). En plantas, los análisis ERTV se han utilizado para evaluar las consecuencias demográficas de la disponibilidad de polinizadores o de la herbívora, competencia, efectos en intensidades de cosecha y de fenómenos naturales e inducidos por el humano (Miriti, Joseph Wright & Howe, 2001; Garcı́a & Ehrlén, 2002; Nordbakken, Rydgren & Økland, 2004; Mondragón, 2009; Davison et al., 2010; Gaoue & Ticktin, 2010; Schmidt et al., 2011; Jacquemyn et al., 2012; Hart-Fredeluces, Ticktin & Lake, 2021).

Los métodos para calcular los ERTV están constantemente actualizándose y de acuerdo con (Hernández et al., 2023) existen 186 análisis de ERTV para 75 especies de animales y 1487 para 200 especies de plantas. Aunque en este trabajo no utilizamos la metodología expuesta por dichos autores mostramos una forma práctica de la aplicación de este análisis.

14.2.1 ¿Cómo se diferencia la elasticidad de ERTV?

A diferencia de la elasticidad, el cual es un tipo de análisis de perturbación que examina cuánto cambiaría el crecimiento de la población si se cambiaran una de las entradas de la matriz comparando múltiples matriz, el análisis ERTV examina cuánto cambió hay en \(\lambda\) en función de la variación observada en las entradas de la matriz (Caswell, 1989a, 2010; Horvitz, Schemske & Caswell, 1997); y por consecuencia es un análisis que toma en cuenta el cambio de las variaciones individualmente registradas en matrices en diferentes poblaciones/ tiempo / experimentos, etc. (Caswell, 2010). Nota que ERTV es una herramienta suplementaria para evaluar el efecto de perturbaciones como los de elasticidad (Caswell, 1989b), dinámica de transiciones (Stott, Townley & Hodgson, 2011) y funciones de transferencias (Stott, Hodgson & Townley, 2012) y no un reemplazos. Cada una de estas herramientas tiene un propósito y una interpretación diferente con sus supuestos.

14.3 Formulación y cálculo de los LTRE

A continuación se describe la formulación matemática de los LTRE y su implementación computacional para descomponer diferencias en el crecimiento poblacional. A diferencia del análisis de elasticidad poblacional, los LTRE explican diferencias observadas en lugar de evaluar cambios hipotéticos en los parámetros demográficos. A diferencia del análisis de elasticidad poblacional, los LTRE explican diferencias observadas en lugar de evaluar cambios hipotéticos en los parámetros demográficos. Las contribuciones LTRE pueden descomponerse en términos de matrices U y F, introducidas en el capítulo sobre matrices U, F y C. ————————————————————————

14.4 Métodos

14.4.1 Ejemplo práctico de ERTV

Para ejemplificar el cálculo de los ERTV utilizaremos los datos recabados por Ramírez-Martínez colectados de a 2017-2018 para la orquídea epífita Oncidium brachyandrum Lindl. en un bosque de encino estacional en Oaxaca, México (Ramı́rez Martı́nez, 2021). La pregunta principal del estudio era saber qué tasas vitales estaban ligadas a las variaciones en los valores de λ de poblaciones de O. brachyandrum creciendo sobre dos hospederos Quercus martinezii C.H.Mull. y Q. rugosa Née. Usando el método ERTV se pudo evaluar el efecto que tiene la variación observada en los parámetros de las matrices en función de las especies de hospedero en los que se encontraban creciendo.

Como el ERTV es una forma de análisis retrospectivo y es análogo al ANOVA (porque cuantifica los efectos observados de los elementos individuales de matriz sobre la variación observada en λ, en contraposición a los efectos esperados) se requiere de un valor de referencia para realizar las comparaciones, por lo que se toma la matriz con el valor más alto de λ como valor de referencia (Caswell, 2010; Timsina et al., 2021).

A continuación, se muestran dos matrices de tipo Lefkovitch (matrices construidas con base en estadíos) para las poblaciones de O. brachyandrum y sus valores respectivos de λ en los dos hospederos, A) Q. martinezii (λ=1.3; IC: 1.11-1.45) y B) Q. rugosa (λ=0.98; IC: 0.87-0.99). El valor de λ fue mayor en Q. martinezii por lo que la matriz de esta especie fue la matriz de referencia para calcular los ERTV.

A)

Plántula Infantil Juvenil Adulto
Plántula 0.68 0.02 3.88 16.53
Infantil 0.23 0.75 0.23 0
Juvenil 0 0.13 0.53 0.58
Adulto 0 0 0.17 0.38

B)

Plántula Infantil Juvenil Adulto
Plántula 0.64 0.06 0 0.005
Infantil 0.23 0.75 0.27 0
Juvenil 0 0.08 0.47 0.27
Adulto 0 0 0.27 0.68

14.5 ——————————————————————–


14.5.1 Matrices de proyecciones y ciclo de vida por especie de hospedero

Cuadro 1. Matrices de proyección poblaciones de dos poblaciones de Oncidiun brachyandrum creciendo sobre Quercus martinezii y Q. rugosa. Los valores de λ (intervalos de confianza ± 95%) son mostrados en la parte superior izquierda de cada matriz, qx, mortalidad por estadío; w, categorías estables de tamaño por estadío; valor reproductivo por estadío, n = el tamaño de muestra en el tiempo cero (el primer muestreo). p: plántula, i: infantil, j: juvenil, A; adulto (Ramı́rez Martı́nez, 2021). Los valores en negritas son los valores que representan la proporción de individuos que se queda en ese estadio.


14.5.2 Diagrama del ciclo de vida

14.5.3 Diagrama para Quercus martinezii

Primeramente se creó el ciclo de vida por especie de hospedero utilizando el siguiente código:

Código
matmart <- rbind(c(0.68, 0.02, 3.88, 16.53), c(0.22, 0.76, 0.23,
    0), c(0, 0.13, 0.53, 0.58), c(0, 0, 0.17, 0.38))

colSums(matmart)  # sumar las filas de la matriz
[1]  0.90  0.91  4.81 17.49
Código
stages <- c("plántula", "infantil", "juvenil", "adulto")  # asignar los nombres de los estadíos
title <- NULL  # título del diagrama ninguno
graph <- expand.grid(to = stages, from = stages)  # crear un data frame con los estadíos
graph$trans <- round(c(matmart), 4)  # redondear los valores de la matriz a 4 decimales
graph <- graph[graph$trans > 0, ]  # seleccionar solo los valores mayores a 0
nodes <- paste(paste0("'", stages, "'"), collapse = "; ")  # crear los nodos
graph$min_len <- (as.numeric(graph$to) - as.numeric(graph$from)) *
    4  # calcular la longitud de las flechas

El ciclo de vida de Oncidium brachyandrum creciendo sobre Quercus martinezii. Las flechas representan las transiciones entre estadíos, estasis y fecundidades, y los números son las tasas vitales de fecundidad, supervivencia y crecimiento. El color para fecundidad, para supervivencia, para crecimiento, para retroceso y para permanencia.


14.5.4 Diagrama para Quercus rugosa

Código
matrug <- rbind(c(0.64, 0.06, 0, 0.0045), c(0.27, 0.75, 0.27,
    0), c(0, 0.08, 0.47, 0.28), c(0, 0, 0.27, 0.68))

stages <- c("plántula", "infantil", "juvenil", "adulto")
title <- NULL
graph <- expand.grid(to = stages, from = stages)
graph$trans <- round(c(matrug), 4)
graph <- graph[graph$trans > 0, ]
nodes <- paste(paste0("'", stages, "'"), collapse = "; ")
graph$min_len <- (as.numeric(graph$to) - as.numeric(graph$from)) *
    4
graph$col <- c("steelblue4", "PaleGreen4", "MediumOrchid4", "steelblue4",
    "PaleGreen4", "MediumOrchid4", "steelblue4", "PaleGreen4",
    "Goldenrod1", "MediumOrchid4", "steelblue4")
edges <- paste0("'", graph$from, "'", " -> ", "'", graph$to,
    "'", "[minlen=", graph$min_len, ",fontsize=", 10, ",color=",
    graph$col, ",xlabel=", paste("\"", graph$trans), "\"]\n",
    collapse = "")
grViz(paste("
digraph {
  {
    graph[overlap=false];
    rank=same;
    node [shape=",
    "egg", ", fontsize=", 12, "];", nodes, "
  }", "ordering=out
  x [style=invis]
  x -> {",
    nodes, "} [style=invis]", edges, "labelloc=\"t\";
  label=\"",
    title, "\"
}"))

El ciclo de vida de Oncidium brachyandrum creciendo sobre Quercus rugosa. Las flechas representan las transiciones entre estadíos, estasis y fecundidades, y los números son las tasas vitales de fecundidad, supervivencia y crecimiento. El color amarillo para fecundidad, azul para supervivencia, verde para crecimiento, violeta para retroceso y azul oscuro para permanencia.


14.6 Procedimiento para ERTV en Excel

Para facilitar e entendimiento de cómo se calcula ERTV se creó la matriz con los términos de referencia (Cuadro 1).

Estadío Plántulas (1) Infantiles (2) Juveniles (3) Adultos (4)
Plántulas (1) p11 (permanencia de plántulas) g21 (retroceso de infantiles a plántulas) f31 (plántulas generadas)
g31 (retroceso de juveniles a plántulas)
f41 (plántulas generadas)
Infantiles (2) g12 (crecimiento de plántulas a infantiles) p22 (permanencia de infantiles) g32 (retroceso de juveniles a infantiles) g42 (retroceso de adultos a infantiles)
Juveniles (3) g13 (crecimiento de plántulas a juveniles) g23 (crecimiento de infantiles a juveniles) p33 (permanencia de juveniles) g43 (retroceso de adultos a juveniles)
Adultos (4) g14 (crecimiento de plántulas a adultos) g24 (crecimiento de infantiles a adultos) g34 (crecimiento de juveniles a adultos) p44 (permanencia de adultos)
Supervivencia s1 (de plántulas) s2 (de infantiles) s3 (de juveniles) s4 (de adultos)

Cuadro 1. Matriz de términos para el entendimiento de los ERTV. Donde: f= fecundidad, g= crecimiento o retrogresión, p= permanencia y s=supervivencia. Los subíndices se refieren a las transiciones entre estadíos.Nota que los parámetros de juvenil que retrogresan a plántula y esa etapa produciendo plántulas se suman.

En la sección Apéndice C se encuentra una hoja de Excel para poder realizar los cálculos de ERTV. En esta sección se explica cómo se construye la matriz de términos y cómo se calculan las tasas vitales para cada una de las especies de hospedero.

Una vez colocadas las matrices en la hoja de trabajo el primer paso será sumar las columnas para cada estadio, esto significará la supervivencia (s) por estadío (s1, s2, s3, s4); para el caso de Q. martinezii en plántulas sería s1= 0.68+0.22= 0.90 (Figura 3). Después se tienen que calcular las transiciones con respecto a la supervivencia; por lo que para el caso de la transición g12 para la matriz de Q. martinezii tenemos g12= 0.22/0.90=0.25; este cálculo se realiza para todas las transiciones. Los valores de fecundidad (f) se tomarán tal cual de la matriz de fecundidad \(matF\). Una vez obtenido esto se procederá a realizar los cálculos con las ecuaciones que se muestran del lado derecho para cada una de las celdas y, además, esto nos sirve para verificar que hayamos calculado bien cada una de las tasas vitales. Por ejemplo, observamos que una proporción de plántulas en Q. martinezii se mantuvo (0.67) este valor se obtiene de multiplicar la supervivencia de plántulas (s1) por la sustracción de 1 menos el crecimiento de plántulas a infantiles 0.89 (1-0.25) = 0.68 (ecuación s1* (1-g12)).


14.6.1 Método usando Excel

En un archivo nuevo de Excel se arma la base, con la columna de vital_rate al principio, seguido por las especies de hospederos (tratamientos) poniendo primeramente el control y después la columna de matrix. Esta base contendrá las ecuaciones de la matriz de referencia. Como la matriz de Q. martinezii tuvo los valores más altos de lambda está se colocará primero en nuestra base que utilizaremos para correr el análisis ERTV.

Error in `flextable()`:
! could not find function "flextable"

Cuadro 2. Ejemplo de base para poder calcular los ERTV.

Es importante colocar en la segunda fila la palabra lambda en la primera columna y después los valores según corresponda a cada tratamiento. Debido a que en Q. rugosa no hubo producción de plántulas (f31) pero en Q. martinezii si hubo se coloca una cantidad muy pequeña pero mayor a cero (e.g. 0.00001) para que se pueda correr el análisis, para las otras transiciones en valor puede ser 0. Una vez culminada la base se guarda el archivo en formato de texto, para continuar en R. Es importante comenzar a colocar las ecuaciones a partir de la segunda fila en la columna matrix.


14.7 Procedimiento en R

Subir la base de datos de la carpeta de trabajo y cargarla en R.

  • Nota que debería observar la base de datos en la consola de R para verificar que se haya cargado correctamente con los mismos valores que en la hoja de Excel.
Código
# Asegurarse de tener instalado y cargado el paquete
# 'popbio' package

# oncidium<-read.table('data/vitalratesoncidium.txt',
# sep='\t', header=TRUE, stringsAsFactors=FALSE, fill=TRUE)
# Aqui la alternativa si tiene los datos en una hoja de
# Excel

# oncidium

Oncidium
# A tibble: 17 × 4
   names.vitalrate martinezzi  rugosa matrix          
   <chr>                <dbl>   <dbl> <chr>           
 1 lambda              1.3     0.93   ""              
 2 s1                  0.896   0.864  "s1*(1-g12)"    
 3 g12                 0.246   0.263  "s1*g12"        
 4 s2                  0.902   0.889  "0"             
 5 g21                 0.0182  0.0625 "0"             
 6 g23                 0.145   0.0937 "s2*g21"        
 7 s3                  0.938   1.000  "s2*(1-g23-g21)"
 8 g32                 0.25    0.267  "s2*g23"        
 9 g34                 0.183   0.267  "0"             
10 s4                  0.967   0.955  "f31"           
11 g43                 0.603   0.286  "s3*g32"        
12 f31                 3.88    0.0001 "s3*(1-g34-g32)"
13 f41                16.5     0.0045 "s3*g34"        
14 <NA>               NA      NA      "f41"           
15 <NA>               NA      NA      "0"             
16 <NA>               NA      NA      "s4*g43"        
17 <NA>               NA      NA      "s4*(1-g43)"    

Debido a que la columna de matriz contiene más filas con datos nos aparecerá la leyenda NA en las otras columnas esto se refiere a que no hay valores disponibles para esas filas

Para extraer los nombres de las tasas vitales (de la fila 2 a la 13), sin incluir el valor de \(\lambda\) el cual está en la primera

Código
razonvital <- Oncidium$names.vitalrate[2:13]

razonvital  # mostrar los nombres del objeto razón vital
 [1] "s1"  "g12" "s2"  "g21" "g23" "s3"  "g32" "g34" "s4"  "g43" "f31" "f41"

14.7.1 Tasa vital sobre Q. martinezzi

Extraer tasas vitales de de la orquídea Oncidium brachyandrum que crecen sobre Q. martinezzi y dejar a lambda a un lado

Código
Martinezzi <- Oncidium$martinezzi[2:13]  # [2:13] se refiere a la fila 2 hasta la 13.
names(Martinezzi) <- razonvital  # asignar los nombres de las tasas vitales
Martinezzi
         s1         g12          s2         g21         g23          s3 
 0.89610000  0.24637681  0.90163934  0.01818182  0.14545450  0.93750000 
        g32         g34          s4         g43         f31         f41 
 0.25000000  0.18333300  0.96666700  0.60344800  3.87500000 16.53000000 

14.7.2 Tasa vital sobre Q. rugosa

Extraer tasas vitales de de la orquidea Oncidium brachyandrum que crecen sobre Q. rugosa y dejar a lambda a un lado

Código
Rugosa <- Oncidium$rugosa[2:13]
names(Rugosa) <- razonvital  # asignar los nombres de las tasas vitales
Rugosa
       s1       g12        s2       g21       g23        s3       g32       g34 
0.8636000 0.2631579 0.8888889 0.0625000 0.0937499 0.9999900 0.2666670 0.2666670 
       s4       g43       f31       f41 
0.9545455 0.2857140 0.0001000 0.0045000 

14.7.3 Extraer los elementos de matriz utilizando los nombres de las tasas vitales

Código
matrix.el <- as.expression(parse(text = Oncidium$matrix))
matrix.el
expression(s1 * (1 - g12), s1 * g12, 0, 0, s2 * g21, s2 * (1 - 
    g23 - g21), s2 * g23, 0, f31, s3 * g32, s3 * (1 - g34 - g32), 
    s3 * g34, f41, 0, s4 * g43, s4 * (1 - g43))
Código
expression(s1 * (1 - g12), s1 * g12, 0, 0, s2 * g21, s2 * (1 -
    g23 - g21), s2 * g23, 0, f31, s3 * g32, s3 * (1 - g34 - g32),
    s3 * g34, f41, 0, s4 * g43, s4 * (1 - g43))
expression(s1 * (1 - g12), s1 * g12, 0, 0, s2 * g21, s2 * (1 - 
    g23 - g21), s2 * g23, 0, f31, s3 * g32, s3 * (1 - g34 - g32), 
    s3 * g34, f41, 0, s4 * g43, s4 * (1 - g43))

14.7.4 Calcular las sensibilidades y elasticidades del ERTV para cada una de las matrices de Oncidium brachyandrum

Nota que usando la función vitalsens se pueden calcular las sensibilidades y elasticidades de las tasas vitales de las matrices de Oncidium brachyandrum creciendo sobre Q. martinezii y Q. rugosa en un mismo objeto.

14.7.4.1 Quercus matinezzi

Código
Martinezzi.se <- vitalsens(matrix.el, Martinezzi)

Martinezzi.se  # observar los resultados
       estimate  sensitivity   elasticity
s1   0.89610000  0.391848564  0.270331597
g12  0.24637681  0.441970792  0.083833089
s2   0.90163934  0.487546981  0.338431982
g21  0.01818182 -0.197108462 -0.002759082
g23  0.14545450  0.948968500  0.106267639
s3   0.93750000  0.285323303  0.205935203
g32  0.25000000 -0.196618688 -0.037843115
g34  0.18333300  0.309836570  0.043731603
s4   0.96666700  0.076632964  0.057031473
g43  0.60344800 -0.059973210 -0.027862445
f31  3.87500000  0.023876282  0.071229597
f41 16.53000000  0.004482143  0.057040147

14.7.4.2 Quercus rugosa

Código
elas(matrug)
           [,1]       [,2]       [,3]         [,4]
[1,] 0.04605361 0.02046105 0.00000000 0.0007706189
[2,] 0.02123167 0.27949530 0.04773035 0.0000000000
[3,] 0.00000000 0.04850097 0.13516864 0.0852450199
[4,] 0.00000000 0.00000000 0.08601564 0.2293271456
Código
Rugosa.se <- vitalsens(matrix.el, Rugosa)
Rugosa.se
     estimate sensitivity    elasticity
s1  0.8636000  0.05650198  5.255855e-02
g12 0.2631579  0.01294108  3.668208e-03
s2  0.8888889  0.35500473  3.398981e-01
g21 0.0625000 -0.06703010 -4.512498e-03
g23 0.0937499  0.18792055  1.897633e-02
s3  0.9999900  0.25571734  2.754374e-01
g32 0.2666670 -0.10562652 -3.033956e-02
g34 0.2666670  0.03162376  9.083430e-03
s4  0.9545455  0.32232024  3.313991e-01
g43 0.2857140 -0.03264579 -1.004675e-02
f31 0.0001000  0.13214735  1.423395e-05
f41 0.0045000  0.14291279  6.927088e-04

14.7.5 Calcular las diferencias en tasas vitales entre las especies de hospederos

En esta parte se calculará la diferencia entre las tasas vitales de Oncidium brachyandrum creciendo sobre Q. martinezii y Q. rugosa. ¿Como se interpreta estos resultados?

Código
vr.dif.Martinezzi.Rugosa <- Rugosa - Martinezzi
vr.dif.Martinezzi.Rugosa
          s1          g12           s2          g21          g23           s3 
 -0.03250000   0.01678109  -0.01275045   0.04431819  -0.05170460   0.06249000 
         g32          g34           s4          g43          f31          f41 
  0.01666700   0.08333400  -0.01212155  -0.31773400  -3.87490000 -16.52550000 

14.7.6 Calcular las tasas vitales para la matriz media

En este paso se calculará la tasa vital media para Oncidium brachyandrum creciendo sobre Q. martinezii y Q. rugosa. La tasa vital media se calcula sumando las tasas vitales de las dos matrices y dividiendo entre 2.

Código
vr.promedia.Martinezzi.Rugosa <- ((Rugosa + Martinezzi)/2)  #calcular la tazas vitales parta la matrix promedia

# Nota: si se tuvieran 3 matrices se sumarían las tasas
# vitales de las tres dividido por 3.

vr.promedia.Martinezzi.Rugosa
        s1        g12         s2        g21        g23         s3        g32 
0.87985000 0.25476735 0.89526412 0.04034091 0.11960220 0.96874500 0.25833350 
       g34         s4        g43        f31        f41 
0.22500000 0.96060623 0.44458100 1.93755000 8.26725000 

14.7.7 Calcular las tasas sensibilidades y elasticidades para la matriz media

En este paso se calculará las sensibilidades y elasticidades para la matriz promedia de Oncidium brachyandrum creciendo sobre Q. martinezii y Q. rugosa.

Código
media.sens.Martinezzi.Rugosa <- vitalsens(matrix.el, vr.promedia.Martinezzi.Rugosa)
media.sens.Martinezzi.Rugosa
      estimate  sensitivity  elasticity
s1  0.87985000  0.329916405  0.24324014
g12 0.25476735  0.299340210  0.06390451
s2  0.89526412  0.443898046  0.33300987
g21 0.04034091 -0.173842318 -0.00587657
g23 0.11960220  0.888672313  0.08906427
s3  0.96874500  0.263014361  0.21350676
g32 0.25833350 -0.186604631 -0.04039483
g34 0.22500000  0.239081436  0.04507659
s4  0.96060623  0.130258448  0.10485134
g43 0.44458100 -0.078313577 -0.02917499
f31 1.93755000  0.026940498  0.04374025
f41 8.26725000  0.008899404  0.06165164

14.7.8 Calcular las contribuciones de ERTV y ver los resultados

Código
LTRE.contrib.Martinezzi.Rugosa <- vr.dif.Martinezzi.Rugosa *
    media.sens.Martinezzi.Rugosa$sensitivity
LTRE.contrib.Martinezzi.Rugosa
          s1          g12           s2          g21          g23           s3 
-0.010722283  0.005023254 -0.005659900 -0.007704377 -0.045948446  0.016435767 
         g32          g34           s4          g43          f31          f41 
-0.003110139  0.019923612 -0.001578934  0.024882886 -0.104391736 -0.147067093 

14.7.9 Resultados de ERTV

En esta sección se une todos los resultados en un solo objeto para poder observarlos de manera conjunta.

Código
LTRE.resultados.Martinezzi.Rugosa <- data.frame(razonvital = razonvital,
    rug.vr = Rugosa, mart.vr = Martinezzi, vr.differencia = vr.dif.Martinezzi.Rugosa,
    media.sens = media.sens.Martinezzi.Rugosa$sensitivity, contribucion = LTRE.contrib.Martinezzi.Rugosa)

flextable(LTRE.resultados.Martinezzi.Rugosa)
Error in `flextable()`:
! could not find function "flextable"

14.7.10 Graficar los resultados de ERTV

Se puede crear un gráfico de la contribución de cada tasa vitales sobre la historia de vida de la especies comparando las dos matrix

Código
ggplot(LTRE.resultados.Martinezzi.Rugosa, aes(y = contribucion,
    x = razonvital, fill = razonvital)) + geom_bar(stat = "identity") +
    rlt_style_fill() + theme(axis.text.x = element_text(angle = 90,
    hjust = 1)) + labs(title = "Oncidium vital rate contribución a la diferencia en lambda",
    x = "razonvital", y = "contribución") + geom_hline(yintercept = 0,
    linetype = "dashed", color = "red") + xlab("Tasa vitales")

Figure 5. Resultados de un Experimento de Respuesta de la Tabla de Vida (ERTV) llevado a cabo para evaluar las contribuciones de las entradas de la matriz a la variación observada en λ.

De acuerdo con el análisis de elasticidad para cada una de las poblaciones de O. brachyandrum, tanto en Q. martinezii como en Q. rugosa la permanencia de individuos infantiles es la que tiene un mayor impacto sobre los valores de la tasa de crecimiento poblacional (Figura 6). De acuerdo al ERTV, el cual toma en cuenta las diferencias en las tasas vitales y la sensibilidad de lambda que es una función no linear de esas tasas vitales, podemos observar que la fecundidad (\(f_{sa}\)) y el crecimiento de plántulas a juveniles (\(g_{sj}\)), de juveniles a adultos (\(g_{ja}\)) y el retroceso de adultos a juveniles (\(g_{aj}\)) tiene las mayores contribuciones a las diferencias en lambda entre Q. martinezii y Q. rugosa que la permanencia de plántulas.

Figure 6. Resultados de los análisis de elasticidad, para dos poblaciones de Oncidium brachyandrum creciendo sobre Quercus martinezii y Q. rugosa. Por proceso demográfico (a) y por estadío (b).

Código
ggplot(LTRE.resultados.Martinezzi.Rugosa, aes(y = media.sens,
    x = razonvital, fill = razonvital)) + geom_bar(stat = "identity") +
    rlt_style_fill() + theme(axis.text.x = element_text(angle = 90,
    hjust = 1)) + labs(title = "Promedio de la Sensitividad",
    x = "razonvital", y = "contribución") + geom_hline(yintercept = 0,
    linetype = "dashed", color = "red") + xlab("Tasa vitales")


14.8 Análisis con R

Ahora enseñar como hacer estos análisis sin tener que usar Excel, aquí un set de script para aplicar a Oncidium brachyandrum.


En esta sección se muestra cómo hacer los análisis de ERTV sin tener que usar Excel, utilizando directamente R. Esto es útil para evitar los pasos intermedios y realizar el análisis de manera más eficiente.

Calcular la matriz promedio

Código
mat.promedio <- (matmart + matrug)/2

mat.promedio
      [,1]  [,2] [,3]    [,4]
[1,] 0.660 0.040 1.94 8.26725
[2,] 0.245 0.755 0.25 0.00000
[3,] 0.000 0.105 0.50 0.43000
[4,] 0.000 0.000 0.22 0.53000

14.9 Convertir las matrices en un vectores

Código
mat.promedio.vector <- as.vector(mat.promedio)

mat.promedio.vector
 [1] 0.66000 0.24500 0.00000 0.00000 0.04000 0.75500 0.10500 0.00000 1.94000
[10] 0.25000 0.50000 0.22000 8.26725 0.00000 0.43000 0.53000
Código
mat_rug.vector <- as.vector(matrug)  # vector para O. rugosa
mat_mart.vector <- as.vector(matmart)  # vector para O. martinezii
Código
mat_rug.vector
 [1] 0.6400 0.2700 0.0000 0.0000 0.0600 0.7500 0.0800 0.0000 0.0000 0.2700
[11] 0.4700 0.2700 0.0045 0.0000 0.2800 0.6800
Código
matrug
     [,1] [,2] [,3]   [,4]
[1,] 0.64 0.06 0.00 0.0045
[2,] 0.27 0.75 0.27 0.0000
[3,] 0.00 0.08 0.47 0.2800
[4,] 0.00 0.00 0.27 0.6800

Unir los vectores de las matrices O. rugosa y O. martinezii

Código
Unido = rbind(mat_rug.vector, mat_mart.vector)

Unido
                [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
mat_rug.vector  0.64 0.27    0    0 0.06 0.75 0.08    0 0.00  0.27  0.47  0.27
mat_mart.vector 0.68 0.22    0    0 0.02 0.76 0.13    0 3.88  0.23  0.53  0.17
                  [,13] [,14] [,15] [,16]
mat_rug.vector   0.0045     0  0.28  0.68
mat_mart.vector 16.5300     0  0.58  0.38

Añadir los nombres a las columnas de la matriz promedio

Código
colnames(Unido)<-expression(a11, a12, a13, a14, # nota que el orden es por columnas no filas
                            a21, a22, a23, a24, 
                            a31, a32, a33, a34,
                            a41, a42, a34, a44)

Unido = as.data.frame(Unido)
Unido$Site <- c("Q. rugosa", "Q. martinezii")

Unido
                 a11  a12 a13 a14  a21  a22  a23 a24  a31  a32  a33  a34
mat_rug.vector  0.64 0.27   0   0 0.06 0.75 0.08   0 0.00 0.27 0.47 0.27
mat_mart.vector 0.68 0.22   0   0 0.02 0.76 0.13   0 3.88 0.23 0.53 0.17
                    a41 a42  a34  a44          Site
mat_rug.vector   0.0045   0 0.28 0.68     Q. rugosa
mat_mart.vector 16.5300   0 0.58 0.38 Q. martinezii

Extraer los elementos del data frame y convertirlos en una lista de matrices

Código
Ob_Atrt <- lapply(split(as.matrix(Unido[, 1:16]), 1:2), matrix,
    ncol = 4, byrow = FALSE)

names(Ob_Atrt) <- Unido$Site

Ob_Atrt
$`Q. rugosa`
     [,1] [,2] [,3]   [,4]
[1,] 0.64 0.06 0.00 0.0045
[2,] 0.27 0.75 0.27 0.0000
[3,] 0.00 0.08 0.47 0.2800
[4,] 0.00 0.00 0.27 0.6800

$`Q. martinezii`
     [,1] [,2] [,3]  [,4]
[1,] 0.68 0.02 3.88 16.53
[2,] 0.22 0.76 0.23  0.00
[3,] 0.00 0.13 0.53  0.58
[4,] 0.00 0.00 0.17  0.38

14.10 Análisis de ERTV para Oncidium brachyandrum

Gráfico de contribución de ERTV para la matriz promedio de Oncidium brachyandrum creciendo sobre Quercus martinezii y Q. rugosa.

Código
Ob <- LTRE(Ob_Atrt, mat.promedio)
Ob
$`Q. rugosa`
             [,1]         [,2]         [,3]        [,4]
[1,] -0.004507693  0.003547226 -0.066416155 -0.13203195
[2,]  0.010501362 -0.001652761  0.001276096  0.00000000
[3,]  0.000000000 -0.031320325 -0.007254719 -0.01693063
[4,]  0.000000000  0.000000000  0.021664700  0.03033586

$`Q. martinezii`
             [,1]         [,2]         [,3]         [,4]
[1,]  0.005224749 -0.002669011  0.049028094  0.050703995
[2,] -0.016519276  0.001687741 -0.001278465  0.000000000
[3,]  0.000000000  0.035099431  0.007976352  0.009683862
[4,]  0.000000000  0.000000000 -0.027868190 -0.020300386

14.11 Analisis de ERTV para Oncidium brachyandrum por hospedero

Convertir los resultados de ERTV en un data frame para facilitar la visualización y manipulación de los datos para usar con ggplot2

Código
Ob <- LTRE(Ob_Atrt, mat.promedio) # Realizar el análisis de ERTV usando la matriz promedio

Ob_df_mart <- as.data.frame(t(Ob$`Q. martinezii`)) # Convertir los resultados de *Q. martinezii* en un data frame
Ob_df_rug <- as.data.frame(t(Ob$`Q. rugosa`)) # Convertir los resultados de *Q. rugosa* en un data frame

Ob_df <- rbind(Ob_df_mart, Ob_df_rug)

Ob_df$Species <- c( # Asignar nombres de especies, una asignación de nombre por cada fila
  "Q. martinezii",
  "Q. martinezii",
  "Q. martinezii",
  "Q. martinezii",
  "Q. rugosa",
  "Q. rugosa",
  "Q. rugosa",
  "Q. rugosa"
)

colnames(Ob_df) <- c("a1i", "a2i", "a3i", "a4i", "Species") # Asignar nombres a las columnas
Ob_df$t_1 <- c("ai1", "ai2", "ai3", "ai4", "ai1", "ai2", "ai3", "ai4") # Asignar nombres a las filas

pivot_long <- tidyr::pivot_longer( # Convertir a formato largo para ggplot2
  Ob_df, # datos de entrada
  cols = c("a1i", "a2i", "a3i", "a4i"), # columnas a pivotar
  names_to = "Transition", # nombre de la nueva columna para las variables
  values_to = "Contribution" # nombre de la nueva columna para los valores
)
pivot_long$Transitions2 <- c("a11", "a12", "a13", "a14",  # Asignar nombres a las transiciones
                             "a21", "a22", "a23", "a24",
                             "a31", "a32", "a33", "a34", 
                             "a41", "a42", "a43", "a44",
                             "a11", "a12", "a13", "a14", 
                             "a21", "a22", "a23", "a24",
                             "a31", "a32", "a33", "a34", 
                             "a41", "a42", "a43", "a44")

# head(pivot_long)

Creación de unos gráficos para ver la contribución de las tasas vitales sobre la variación en λ para cada una de las especies de hospedero.

Código
library(ggplot2)

ggplot(pivot_long, aes(x = Transitions2, y = Contribution, fill = Species)) +
    geom_bar(stat = "identity", position = "dodge") + labs(title = "Contribución de la variación en las transiciones sobre lambda",
    x = "Transiciones", y = "Contribuciones a λ") + rlt_style_fill() +
    # facet_wrap(~Species) +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) + geom_hline(yintercept = 0,
    linetype = "dashed", color = "red") + theme(legend.position = "none")

14.12 Alternativa de grafico

Código
ggplot(pivot_long, aes(x = Transitions2, y = Contribution, fill = Species)) +
    geom_bar(stat = "identity", position = "dodge") + labs(title = "Contribución de la variación en las transiciones sobre lambda",
    x = "Transiciones", y = "Contribuciones a λ") + rlt_style_fill() +
    facet_wrap(~Species) + theme(axis.text.x = element_text(angle = 45,
    hjust = 1)) + geom_hline(yintercept = 0, linetype = "dashed",
    color = "red") + theme(legend.position = "none")

Aquí se observa el efecto de las transiciones de las tasas vitales sobre la variación en λ para las dos especies de hospedero. Las barras positivas indican contribuciones positivas a la variación en \(\lambda\), mientras que las barras negativas indican contribuciones negativas sobre \(\lambda\). El efecto de las transiciones de las tasas vitales sobre la variación en λ es diferente para cada especie de hospedero, no solamente el efecto sobre las tasa vitales son diferentes pero entre hospedero pero los cambios relativos. Lo que indica que las dinámicas poblacionales de Oncidium brachyandrum son influenciadas por el hospedero en el que crece. Este patrón de cambios de tasa vitales y su importancia relativa en la variación de λ necesita ser estudiado en más especies de orquídeas epífitas para entender si es un patrón generalizado o no. Por consecuencia el proximo paso es evaluar cual son la características de las especies de hospedero que influyen en la dinámica poblacional de las orquídeas epífitas.

Enlace sobre ERTV https://bookdown.org/cdorm/lefko3gentle/ltre.html

Birch L. 1953. Experimental background to the study of the distribution and abundance of insects: I. The influence of temperature, moisture and food on the innate capacity for increase of three grain beetles. Ecology 34:698-711.
Caswell H. 1989b. Analysis of life table response experiments I. Decomposition of effects on population growth rate. Ecological Modelling 46:221-237.
Caswell H. 1989a. Matrix Population Models. Sinauer Sunderland, MA.
Caswell H. 2010. Life table response experiment analysis of the stochastic growth rate. Journal of Ecology 98:324-333.
Davison R, Jacquemyn H, Adriaens D, Honnay O, De Kroon H, Tuljapurkar S. 2010. Demographic effects of extreme weather events on a short-lived calcareous grassland species: stochastic life table response experiments. Journal of Ecology 98:255-267.
Gaoue OG, Ticktin T. 2010. Effects of harvest of nontimber forest products and ecological differences between sites on the demography of African mahogany. Conservation Biology 24:605-614.
Garcı́a MB, Ehrlén J. 2002. Reproductive effort and herbivory timing in a perennial herb: fitness components at the individual and population levels. American Journal of Botany 89:1295-1302.
Hansen TF, Stenseth NC, Henttonen H. 1999. Multiannual vole cycles and population regulation during long winters: an analysis of seasonal density dependence. The American Naturalist 154:129-139.
Hart-Fredeluces G, Ticktin T, Lake FK. 2021. Simulated Indigenous fire stewardship increases the population growth rate of an understorey herb. Journal of Ecology 109:1133-1147.
Hastings A, Abbott KC, Cuddington K, Francis TB, Lai Y-C, Morozov A, Petrovskii S, Zeeman ML. 2021. Effects of stochasticity on the length and behaviour of ecological transients. Journal of the Royal Society Interface 18:20210257.
Hernández CM, Ellner SP, Adler PB, Hooker G, Snyder RE. 2023. An exact version of Life Table Response Experiment analysis, and the R package exactLTRE. Methods in Ecology and Evolution 14:939-951.
Hernández CM, Ellner SP, Snyder RE, Hooker G. 2024. The natural history of luck: A synthesis study of structured population models. Ecology Letters 27:e14390.
Horvitz C, Schemske DW, Caswell H. 1997. The relative «importance» of life-history stages to population growth: prospective and retrospective analyses. In: Structured-population models in marine, terrestrial, and freshwater systems. Springer, 247-271.
Jacquemyn H, Brys R, Davison R, Tuljapurkar S, Jongejans E. 2012. Stochastic LTRE analysis of the effects of herbivory on the population dynamics of a perennial grassland herb. Oikos 121:211-218.
Levin L, Caswell H, Bridges T, DiBacco C, Cabrera D, Plaia G. 1996. Demographic responses of estuarine polychaetes to pollutants: life table response experiments. Ecological Applications 6:1295-1313.
Miriti MN, Joseph Wright S, Howe HF. 2001. The effects of neighbors on the demography of a dominant desert shrub (Ambrosia dumosa). Ecological Monographs 71:491-509.
Mondragón D. 2009. Population viability analysis for Guarianthe aurantiaca, an ornamental epiphytic orchid harvested in Southeast México. Plant Species Biology 24:35-41.
Nordbakken J-F, Rydgren K, Økland R. 2004. Demography and population dynamics of Drosera anglica and D. rotundifolia. Journal of Ecology 92:110-121.
Oli MK, Slade NA, Dobson FS. 2001. Effect of density reduction on Uinta ground squirrels: analysis of life table response experiments. Ecology 82:1921-1929.
Ramı́rez Martı́nez A. 2021. Host tree effect on demography and phenology of epiphytic species. Tesis doctoral Thesis. Instituto Politécnico Nacional. Centro Interdisciplinario de Investigación.
Schmidt IB, Mandle L, Ticktin T, Gaoue OG. 2011. What do matrix population models reveal about the sustainability of non-timber forest product harvest? Journal of Applied Ecology 48:815-826.
Stott I, Hodgson DJ, Townley S. 2012. Beyond sensitivity: nonlinear perturbation analysis of transient dynamics. Methods in Ecology and Evolution 3:673-684.
Stott I, Townley S, Hodgson DJ. 2011. A framework for studying transient dynamics of population projection matrix models. Ecology Letters 14:959-970.
Sun W, Yuan X, Liu Z-J, Lan S, Tsai W, Zou S-Q. 2019. Multivariate analysis reveals phenotypic diversity of Euscaphis japonica population. PloS one 14:e0219046.
Teitel Z, Klimowski A, Campbell LG. 2016. Assessing the effects of hybridization and precipitation on invasive weed demography using strength of selection on vital rates. BMC Evolutionary Biology 16:1-13.
Timsina B, Kindlmann P, Münzbergová Z, Rokaya MB. 2021. Six-year demographic study of the terrestrial orchid, Crepidium acuminatum: implications for conservation. Frontiers in Ecology and Evolution 9:676993.