Introduction
Seed production ensures the persistence of tree populations and
forest cover over the long term. Some tree species, like sugar maple
(Acer saccharum), produce seeds synchronously at irregular
intervals, a phenomenon called masting. Red maple
(Acer rubrum), a non-masting species, is hypothesized to
exhibit muted reproductive dynamics compared to sugar
maple.
In this project, we analyze datasets collected at Harvard Forest
since 2011, including flower counts, branch-level samaras, and seed
counts, to compare the reproductive dynamics of sugar and red maple
species.
Data and Methods
Load Libraries
library(tidyverse)
library(DT)
Load Datasets
library(readr)
hf285_04_maple_flower <- read_csv("knb-lter-hfr/hf285-04-maple-flower.csv")
library(readr)
hf285_06_maple_fall_branch <- read_csv("knb-lter-hfr/hf285-06-maple-fall-branch.csv")
library(readr)
hf285_09_maple_seed_count <- read_csv("knb-lter-hfr/hf285-09-maple-seed-count.csv")
Sample of Data
datatable(head(hf285_04_maple_flower, 10))
This table shows branch-level reproductive observations for sugar
and red maples. Each row corresponds to a single internode on a branch,
with columns showing the tree ID, branch, canopy position, internode
number and year, bud count and position, counts of male, female, and
unknown flowers, and leaf presence. Readers can see how flower
production varies within branches and among different trees.
datatable(head(hf285_06_maple_fall_branch, 10))
This table records branch-level samara production. Each row includes
the tree ID, branch, treatment type (FL = fertilized, NF =
non-fertilized), internode year and number, internode length, leaf
counts and area, and number of samaras. It provides insight into how
branch growth and treatment may influence samara production.
datatable(head(hf285_09_maple_seed_count, 10))
This table shows total seed production for each tree on specific
dates. Columns include the tree ID, date of collection, counts of seeds
by type (EC and JR), total seed count, and any notes. It allows
comparison of reproductive output among trees and provides the basis for
analyzing yearly seed production trends.
Data Cleaning
hf285_04_maple_flower <- hf285_04_maple_flower %>%
mutate(year = as.numeric(format(as.Date(date), "%Y")),
total_flowers = num.male + num.female)
Here we extract the year from the date column and calculate total
flowers per observation by summing male and female flowers. This
prepares the data for yearly summaries.
hf285_06_maple_fall_branch <- hf285_06_maple_fall_branch %>%
mutate(year = as.numeric(format(as.Date(date), "%Y")))
Yearly Summaries
flowers_summary <- hf285_04_maple_flower %>%
group_by(tree, year) %>%
summarise(total_flowers = sum(total_flowers, na.rm = TRUE))
branch_summary <- hf285_06_maple_fall_branch %>%
group_by(tree, year) %>%
summarise(total_samaras = sum(num.samaras, na.rm = TRUE))
seed_summary <- hf285_09_maple_seed_count %>%
group_by(tree, year) %>%
summarise(total_seeds = sum(total.count, na.rm = TRUE))
We aggregate flower, samara, and seed counts by tree and year to
obtain total reproductive output per tree for each year.
Merge All Data
reproduction <- flowers_summary %>%
full_join(branch_summary, by = c("tree", "year")) %>%
full_join(seed_summary, by = c("tree", "year"))
These summaries are combined into a single dataset to allow joint
analysis of flowers, samaras, and seeds for each tree and year.
Species Mapping
species_map <- tibble(
tree = unique(reproduction$tree)
) %>%
mutate(
species = ifelse(tree == "HF1" | tree == "HF4" | tree == "HF5" | tree == "HF6" |
tree == "HF7" | tree == "HF9" | tree == "HF10" | tree == "HF12" |
tree == "HF13" | tree == "HF16",
"Sugar",
ifelse(tree == "HF38" | tree == "HF41" | tree == "HF42" | tree == "HF43" |
tree == "HF44" | tree == "HF45",
"Red",
NA))
)
reproduction <- left_join(reproduction, species_map, by = "tree")
sum(is.na(reproduction$species))
## [1] 97
We add a species column to indicate whether each tree is sugar or
red maple, which is necessary for species-level comparisons.
Species-Level Summary
species_summary <- reproduction %>%
group_by(species, year) %>%
summarise(
mean_flowers = mean(total_flowers, na.rm = TRUE),
sd_flowers = sd(total_flowers, na.rm = TRUE),
mean_samaras = mean(total_samaras, na.rm = TRUE),
mean_seeds = mean(total_seeds, na.rm = TRUE),
sd_seeds = sd(total_seeds, na.rm = TRUE)
)
Finally, we calculate yearly mean and standard deviation of flowers,
samaras, and seeds by species, which will be used for plotting and
interpreting reproductive patterns.
Results
Seed Production Over Time
species_summary_filtered <- species_summary %>% filter(!is.na(species))
ggplot(species_summary_filtered, aes(x = year, y = mean_seeds, color = species)) +
geom_line(size = 1.2) +
geom_point(size = 2) +
labs(
title = "Yearly Seed Production by Species",
x = "Year",
y = "Mean Seed Count",
color = "Species"
)

Seed production over time shows differences between sugar maple and
red maple. Sugar maple has clear peaks, with the highest seed production
in 2011 at 44 seeds per tree, followed by lower production in other
years. Red maple also peaks in 2011 at 51 seeds per tree, but its
production in later years is irregular, sometimes zero and sometimes
moderate, like in 2017. This shows that sugar maple reproduces in a more
regular, synchronized pattern, while red maple has irregular and smaller
peaks, consistent with it being a non-masting species.
Flower Production Over Time
ggplot(species_summary_filtered, aes(x = year, y = mean_flowers, color = species)) +
geom_point(size = 3) +
labs(
title = "Yearly Flower Production by Species",
x = "Year",
y = "Mean Flower Count",
color = "Species"
)

Flower production follows a similar pattern. Sugar maple flowers the
most in 2011 with 2,530 flowers per tree, drops sharply in 2012, and has
a small increase in 2014. Red maple has an even higher peak in 2011 at
2,961 flowers but then drops sharply and mostly stays low in later
years. This suggests that red maple can occasionally produce many
flowers, but it does not do so consistently like sugar maple.
Samara Production Over Time
ggplot(species_summary_filtered, aes(x = year, y = mean_samaras, color = species)) +
geom_line(size = 1.2) +
geom_point(size = 2) +
labs(
title = "Yearly Samara Production by Species",
x = "Year",
y = "Mean Samara Count",
color = "Species"
)

Samara production also reflects these trends. Sugar maple has
moderate samara counts in 2011, with lower numbers in following years.
Red maple has the highest samaras in 2011 at 114, with smaller peaks in
2013 and 2014, but is mostly low in other years. This shows that sugar
maple reproduces in strong, synchronized bursts, while red maple
reproduces irregularly.
Summary Table
datatable(species_summary_filtered %>% select(species, year, mean_flowers, sd_flowers, mean_samaras, mean_seeds, sd_seeds))
The summary table confirms these patterns. Sugar maple has clear,
synchronized peaks, while red maple has smaller and more irregular
peaks, with many years of low or zero production. Overall, sugar maple
shows typical masting behavior, and red maple shows muted, irregular
reproductive dynamics. This supports the idea that red maple does not
mast like sugar maple and only occasionally has higher reproductive
output.
Conclusion
Based on flower, samara, and seed data, sugar maple shows clear
peaks in reproduction, especially in 2011, while red maple has smaller,
irregular peaks with many years of low production. This indicates that
sugar maple follows typical masting behavior, reproducing in coordinated
bursts, whereas red maple reproduces irregularly and does not mast.
These results support the idea that red maple has muted reproductive
dynamics compared to sugar maple. One limitation of this analysis is the
presence of missing data for several years and trees, which may affect
the accuracy of the calculated averages and observed trends. Some years
have no recorded flower or seed counts for certain trees, making it
harder to fully capture reproductive patterns. Acknowledging these gaps
is important, and future studies could aim to collect more complete
datasets to strengthen the conclusions.