The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

01 Quick start: credible intervals for transition probabilities

Raymond Tremblay

2026-04-17

What this vignette shows

This is a minimal worked example of the two most important functions in raretrans:

If you are new to Bayesian statistics, beta distributions, or Dirichlet priors, see the vignette Credible intervals for transition probabilities: Cypripedium calceolus (vignette("credible_intervals")), which explains those concepts in detail.

The data

We use a single transition period from population 231 of Lepanthes eltoroensis, a rare Puerto Rican orchid monitored annually. The data are included in raretrans as L_elto (see ?L_elto).

The population has three stages:

Code Stage
p Proto-adult
j Juvenile
a Adult

Stage m (missing next year) is treated as death.

From year 6 of population 231 we observed:

# Observed transitions (from -> to): n individuals
# a -> a : 18    j -> a : 2    p -> j : 1
# j -> j : 13    p -> p : 8    p -> m : 2  (died)
#
# No deaths observed in adults or juveniles — a classic holey matrix!
# raretrans handles this by placing prior weight on the dead fate.

Build the input matrices

raretrans needs a TF list with two matrices (T for transitions, F for fertility) and a vector N of observed individuals per stage.

library(raretrans)

stage_names <- c("proto", "juvenile", "adult")

# Transition matrix T (column = source stage, row = destination stage)
# Columns must be in the same order as stage_names
T_mat <- matrix(
  c(8,  0,  0,   # proto  -> proto, juvenile, adult
    1, 13,  0,   # juvenile -> proto, juvenile, adult
    0,  2, 18),  # adult  -> proto, juvenile, adult
  nrow = 3, ncol = 3, byrow = TRUE,
  dimnames = list(stage_names, stage_names)
)

# Fertility matrix F (no sexual reproduction observed this period)
F_mat <- matrix(0, nrow = 3, ncol = 3,
                dimnames = list(stage_names, stage_names))

TF <- list(T = T_mat, F = F_mat)

# Observed number of individuals at start of period (column sums of T + deaths)
N <- c(proto = 11, juvenile = 15, adult = 18)

T_mat
#>          proto juvenile adult
#> proto        8        0     0
#> juvenile     1       13     0
#> adult        0        2    18

Note that adults and juveniles have no observed deaths — their columns sum to less than N only because of transitions to other stages, not mortality. This is the holey matrix problem: a naive estimate would give survival probability = 1.0, which is biologically impossible.

Compute credible intervals

cri <- transition_CrI(TF, N, stage_names = stage_names)
#> Warning in stats::qbeta(alpha_lower, a, b): NaNs produced
#> Warning in stats::qbeta(alpha_upper, a, b): NaNs produced
#> Warning in stats::qbeta(alpha_lower, a, b): NaNs produced
#> Warning in stats::qbeta(alpha_upper, a, b): NaNs produced
#> Warning in stats::qbeta(alpha_lower, a, b): NaNs produced
#> Warning in stats::qbeta(alpha_upper, a, b): NaNs produced
cri
protoproto 7.35              
protojuvenile 0.938 0.754   0.999 
protoadult 0.02082.32e-080.14  
protodead -7.31              
juvenileproto 0.01561.71e-080.106 
juvenilejuvenile 12.2               
juvenileadult 1.89              
juveniledead-13.1               
adultproto 0.01321.43e-080.0892
adultjuvenile 0.01321.43e-080.0892
adultadult 17.1               
adultdead-16.1               

Even though no adult deaths were observed, transition_CrI() returns a non-zero credible interval for the dead fate of adults and juveniles. The prior places a small but non-zero weight on mortality, producing biologically realistic estimates.

Visualise

Including the dead fate

plot_transition_CrI(cri,
                    title = "Lepanthes eltoroensis — population 231, year 6")
#> Warning: Removed 7 rows containing missing values or values outside the scale range
#> (`geom_pointrange()`).
Posterior transition probabilities with 95% credible intervals. Note the non-zero dead fate for adults and juveniles despite zero observed deaths.
Posterior transition probabilities with 95% credible intervals. Note the non-zero dead fate for adults and juveniles despite zero observed deaths.

The wide credible intervals for the dead fate of adults and juveniles reflect genuine uncertainty — we know mortality must be possible, but we have no direct observations to estimate its rate precisely.

Excluding the dead fate

plot_transition_CrI(cri,
                    include_dead = FALSE,
                    title = "Lepanthes eltoroensis — survival transitions only")
#> Warning: Removed 4 rows containing missing values or values outside the scale range
#> (`geom_pointrange()`).
Posterior transition probabilities for survival transitions only.
Posterior transition probabilities for survival transitions only.

Next steps

Topic Vignette
Full posterior density plots vignette("credible_intervals")
Effect of prior weight vignette("credible_intervals")
Multi-period analysis vignette("onepopperiod")
Prior choice and Bayesian background vignette("transition_priors")

Reference

Tremblay, R. L., Tyre, A. J., Pérez, M.-E., & Ackerman, J. D. (2021). Population projections from holey matrices: Using prior information to estimate rare transition events. Ecological Modelling, 447, 109526. https://doi.org/10.1016/j.ecolmodel.2021.109526

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.