21 over latent states to calculate model likelihoods and limiting MCMC sampling to top-level parameters. This introduces a computational trade-off: simplified MCMC sampling with the additional expense of filtering. Through examples, we observe that worthwhile gains in sampling efficiency result from this approach. Furthermore, the filtering MCMC permits a reduced representation of datasets with repeated observations. This simplification is not possible when using traditional latent state MCMC, since each (possibly duplicated) observational history requires its own sequence of latent states. When appropriate, combining our filtering MCMC with this reduced data representation provides an additional echelon of improvement in MCMC sampling efficiency, the extent of which is limited only by the degree of repetition in the initial data. We note that the filtering MCMC approach forgoes generating posterior samples for latent states. In some analyses the distribution of latent variables at a particular obser- vational periods may be of interest, or otherwise may be used (for example) to estimate longevity distributions. The inclusion of latent variables would also be necessary when used as explanatory variables in other parts of a hierarchical model ( e.g. , Risk, De Valpine, and Beissinger, 2011), or in the case of individual-specific covariates. Our suggested approaches would not be appropriate in these analysis scenarios. The analyses presented herein are facilitated by the NIMBLE package for R. NIMBLE allows user-defined distribution functions to be used directly in hierarchical model specifica- tions. We define a multivariate distribution function parametrized by state transition and observation matrices, where the probability density evaluation routine implements discrete filtering to calculate likelihood values. Models are specified using this distribution, which effectively embeds filtering into the model for the purposes of likelihood calculation. NIM- BLE’s MCMC engine may then be applied to the resulting model to achieve the filtering MCMC. We make use of NIMBLE’s default MCMC as well as that resulting from automated parameter blocking. The distinction of allowing programmable models and statistical algo- rithms, as compared to other statistical software, makes such analyses possible in NIMBLE.