phenesse vignette

Contact Information: Michael W. Belitz (


The R package ‘phenesse’ provides functions to calculate phenological estimates for multiple phenological metrics. It can be especially useful when estimating the onset or offset of a phenological event using presence-only data.


Loading example data

We provide example incidental observations from iNaturalist for four species and a small extent of the United States. These data are for the year 2019 up until mid October and are not scored by phenological phases. The four species are Speyeria cybele, Danaus plexippus, Rudbeckia hirta, and Asclepias syriaca.

example iNaturalist data:

inat_examples <- inat_examples

Use the Weibull-corrected estimates for any percentile of a distribution.

Estimate the onset, 10% and 50% of when Speyeria cybele has been observed in 2019 across the entire extent.

s_cybele <- subset(inat_examples, scientific_name == "Speyeria cybele")

# calculate onset, note iterations are much lower than desired for quick 
# vignette knit. Increase interations for robust calculations
weib_percentile(observations = s_cybele$doy, percentile = 0, iterations = 20)
#> [1] 110.1495
#calculate 1st percentile
weib_percentile(observations = s_cybele$doy, percentile = 0.1, iterations = 20)
#> [1] 155.4506
#calculate 50th percentile
weib_percentile(observations = s_cybele$doy, percentile = 0.5, iterations = 20)
#> [1] 194.3791

Use non-parametric bootstrapping to calculate confidence interval of estimate

CAUTION: Calculating confidence interval of Weibull-corrected estimates are computationally expensive. Consider options to parallelize calculations

Estimate the 50% of when Speyeria cybele were observed in 2019 and calculate CI

Use functions to calculate confidence interval of quantile function and mean estimates

Estimate the 10% and 50% phenometrics and confidence intervals for a quantile estimate of Rudbeckia hirta.

r_hirta <- subset(inat_examples, scientific_name == "Rudbeckia hirta")

# calculate 50% quantile and CIs
quantile_ci(observations = r_hirta$doy, percentile = 0.5, bootstraps = 100)
#> Warning in norm.inter(t, adj.alpha): extreme order statistics used as endpoints
#>     estimate low_ci high_ci
#> 50%    185.5    173     193

Calculate the mean estimate and confidence intervals of the estimate of Rudbeckia hirta.

r_hirta <- subset(inat_examples, scientific_name == "Rudbeckia hirta")

# calculate 50% quantile and CIs
mean_ci(observations = r_hirta$doy, bootstraps = 100)
#>   estimate   low_ci  high_ci
#> 1 192.7222 181.4182 203.6193