Demographic rates of tree species in subtropical forests vary across ontogenetic stages regardless of their biogeographical origin and leaf habit: Morales et al. (2026) at Austral Ecology.
This repository contains the data and R code used to analyze demographic vital rates (recruitment, mortality, turnover and population growth) of tree species, and to test whether these rates are associated with biogeographic origin (Tropical vs. Temperate), leaf habit (Deciduous vs. Evergreen), and ontogenetic stage (Adult vs. Juvenile).
The repository is organized so that anyone can reproduce the statistical analysis, figures, and supplementary phylogenetic tests starting from the species-level demographic data provided here.
This repository makes available the processed, species-level data:
- Adult and juvenile abundance counts (survivors, recruits, deaths) per species, used to calculate vital rates.
- Each species' biogeographic origin and leaf habit.
The original individual-level (tree/stem) census data are not included in this repository, as they correspond to raw field-monitoring records from the long-term forest plots. The species-level tables below are the starting point for reproducing the analysis.
tree_demographic_rates/
├── R-scripts/
│ ├── 00_packages_and_setup.R # installs/loads required packages
│ ├── 01_raw_data_processing.R # documentation only (raw data not included)
│ ├── 02_vital_rates.R # recruitment, mortality, turnover, growth
│ ├── 03_biogeographic_origin_and_leaf_habit.R # merges vital rates with species traits
│ ├── 04_glm_models.R # GLMs testing origin/habit/stage effects
│ ├── 05_figures.R # main figures (predicted vs. observed rates)
│ ├── 06_phylogenetic_signal.R # phylogenetic tree and signal tests
│ └── 07_supplementary_figure.R # Figure S1 (tree + caption)
├── processed-data/
│ ├── adult_species_level.csv # starting data: adults
│ └── juvenile_species_level.csv # starting data: juveniles
├── species-info/
│ └── biogeo_origin_leaf_habit.csv # starting data: species traits
├── vital-rates/ # generated by 02_vital_rates.R
├── data-analysis/ # generated by 03_biogeographic_origin_and_leaf_habit.R
├── figures/ # generated by 05_figures.R (reference copies included)
├── supplementary/ # generated by 04 and 07 (reference copies included,
│ # plus the original manuscript table as .docx)
└── tree_demographic_rates.Rproj
One row per species (species with fewer than 10 individuals in the first census were excluded). Columns:
| Column | Description |
|---|---|
Species |
Species name (Genus species) |
Ns |
Number of individuals that survived between the two censuses |
Nr |
Number of individuals recruited into the population by the second census |
Nm |
Number of individuals that died between the two censuses |
These counts are the only inputs needed to calculate the recruitment,
mortality, turnover and finite population growth rates in
02_vital_rates.R. The average interval between the two censuses was
5.594278 years.
One row per species. Columns:
| Column | Description |
|---|---|
Species |
Species name (Genus species) |
Origin |
Biogeographic origin: Tropical or Temperate |
Deciduousness |
Leaf habit: Deciduous or Evergreen |
-
Open
tree_demographic_rates.Rprojin RStudio (this sets the working directory to the repository root, which all scripts assume). -
Run
R-scripts/00_packages_and_setup.Rto install and load the required packages (see list below).V.PhyloMaker2is installed from GitHub. -
Run the numbered scripts in order:
Script Purpose Needs 01_raw_data_processing.RDocuments how the species-level tables were derived from raw census data Not reproducible here — raw data not included; kept for transparency 02_vital_rates.RComputes recruitment, mortality, turnover and population growth rates processed-data/*_species_level.csv03_biogeographic_origin_and_leaf_habit.RMerges vital rates with origin and leaf habit outputs of script 02, species-info/biogeo_origin_leaf_habit.csv04_glm_models.RFits and selects the GLMs (ordbeta and Gamma models) outputs of script 03 05_figures.RProduces the predicted-vs-observed rate figures outputs of script 03 06_phylogenetic_signal.RBuilds the phylogeny and tests for phylogenetic signal outputs of script 03 07_supplementary_figure.RAdds the caption to the phylogenetic tree figure (Figure S1) run right after script 06, in the same session (reuses the phylo_panelobject)Scripts 02–06 create their own output folders (
vital-rates/,data-analysis/,figures/,supplementary/) if they do not already exist, so the analysis can be reproduced from a clean checkout containing onlyR-scripts/,processed-data/, andspecies-info/. -
Reference copies of the main figures, the Figure S1 PDF, and the model estimates table are already included in
figures/andsupplementary/so you can check your output against the original results without re-running everything.
c("dplyr", "tidyverse", "readr", "tidyr",
"ggplot2", "ggthemes", "patchwork", "ggeffects",
"data.table", "formattable",
"ggpubr", "rstatix",
"glmmTMB", "betareg", "performance", "DHARMa",
"broom.mixed", "purrr",
"colorspace", "visreg", "scales", "ggsignif",
"ape", "caper", "cowplot",
"remotes")Plus V.PhyloMaker2, installed with:
remotes::install_github("jinyizju/V.PhyloMaker2")If you use this data or code, please cite the associated publication [DOI: 10.5281/zenodo.22696037].
Davi da Cunha Morales (e-mail: davidacunhamorales@gmail.com)