Introduction to HTDV

José Mauricio Gómez Julián

2026-04-29

Overview

HTDV provides hypothesis testing and estimation for dependent, unbalanced data through four integrated layers: (i) spectrally-faithful likelihoods (Whittle, composite), (ii) hierarchical Bayesian priors on the dependence nuisance parameters, (iii) Hamiltonian Monte Carlo with mandatory diagnostic gates, and (iv) a Bayesian decision layer (ROPE, bridge-sampling Bayes factors, WAIC, leave-future-out cross-validation, stacking). Finite-sample robustness is delivered by fixed-bandwidth HAR inference, block bootstrap with automatic block length, and adaptive conformal prediction.

Quick start: long-run variance and fixed-b HAR

library(HTDV)

x <- stats::arima.sim(model = list(ar = 0.6), n = 200,
                      rand.gen = stats::rnorm)
x <- as.numeric(x)

lrv <- htdv_lrv(x, kernel = "qs", bandwidth = "andrews")
lrv$lrv

test <- htdv_fixedb(x, theta0 = 0, B = 0.1,
                    sims = 1000L, seed = 1L)
test$p_value

Block bootstrap

boot <- htdv_boot(x, mean, R = 1999L,
                  type = "stationary",
                  block_length = "auto",
                  seed = 1L)
boot$ci_percentile
boot$block_length

Adaptive conformal

pred <- function(history) {
  if (length(history) >= 1L) history[length(history)] else 0
}
conf <- htdv_conformal(x, pred, alpha_target = 0.1,
                       lambda = 0.05, burn_in = 20L)
conf$coverage

Hierarchical Bayesian fit

The default htdv_fit() compiles a Stan model on first use and caches it for subsequent calls.

fit <- htdv_fit(x, model = "tac", chains = 4L, iter = 4000L,
                refresh = 0L, seed = 1L)
htdv_summary(fit, rope = c(-0.1, 0.1), target = "theta")
htdv_diagnostics(fit)$passed
htdv_ppc(fit, x)

Envelope across likelihoods

fit_w <- htdv_fit(x, model = "whittle", chains = 4L, iter = 4000L,
                  refresh = 0L, seed = 2L)
fit_c <- htdv_fit(x, model = "composite", chains = 4L, iter = 4000L,
                  refresh = 0L, seed = 3L)

env <- htdv_envelope(list(whittle = fit_w, composite = fit_c),
                     target = "theta")
env$intervals

Decision: ROPE, Bayes factor, stacking

draws <- as.numeric(rstan::extract(fit$stanfit, pars = "theta")$theta)
htdv_rope(draws, rope = c(-0.1, 0.1))$decision

if (requireNamespace("bridgesampling", quietly = TRUE)) {
  htdv_bf(fit_w, fit_c)$bf10
}

if (requireNamespace("loo", quietly = TRUE)) {
  htdv_stack(list(whittle = fit_w, composite = fit_c))$weights
}

Explicit equivalence constants

htdv_equivalence_constants(gamma = 2, q = 6, n = length(x))

References

Andrews, D. W. K. (1991). Econometrica 59(3): 817-858.

Berger, J. O. (1994). Test 3(1): 5-124.

Gibbs, I., & Candes, E. (2021). NeurIPS 34: 1660-1672.

Kiefer, N. M., & Vogelsang, T. J. (2005). Econometric Theory 21(6): 1130-1164.

Kruschke, J. K. (2018). Advances in Methods and Practices in Psychological Science 1(2): 270-280.

Patton, A., Politis, D. N., & White, H. (2009). Econometric Reviews 28(4): 372-375.

Varin, C., Reid, N., & Firth, D. (2011). Statistica Sinica 21(1): 5-42.

Vehtari, A., Gelman, A., & Gabry, J. (2017). Statistics and Computing 27(5): 1413-1432.

Watanabe, S. (2010). JMLR 11: 3571-3594.

Whittle, P. (1953). Arkiv foer Matematik 2(5): 423-434.

Yao, Y., Vehtari, A., Simpson, D., & Gelman, A. (2018). Bayesian Analysis 13(3): 917-1007.