--- title: "Getting Started with dcvar" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Getting Started with dcvar} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} has_stan <- requireNamespace("rstan", quietly = TRUE) eval_fits <- identical(Sys.getenv("DCVAR_EVAL_VIGNETTES"), "true") && has_stan knitr::opts_chunk$set( collapse = TRUE, comment = "#>", eval = eval_fits ) ``` ## Installation The dcvar package uses [rstan](https://mc-stan.org/rstan/) as its default backend for Bayesian model fitting. ```{r install, eval = FALSE} # Install rstan (available on CRAN) install.packages("rstan") # Install dcvar from GitHub install.packages("remotes") remotes::install_github("benlug/dcvar") ``` Optionally, you can use [cmdstanr](https://mc-stan.org/cmdstanr/) as an alternative backend by installing it and CmdStan: ```{r install-cmdstanr, eval = FALSE} install.packages("cmdstanr", repos = c("https://stan-dev.r-universe.dev", getOption("repos")) ) cmdstanr::install_cmdstan() ``` ## Simulating Data dcvar includes trajectory generators and a data simulator for testing: ```{r simulate, eval = TRUE} library(dcvar) # Generate a decreasing rho trajectory (therapy effect) rho_true <- rho_decreasing(n_time = 150, rho_start = 0.7, rho_end = 0.3) # Simulate bivariate VAR(1) data with this trajectory sim <- simulate_dcvar( n_time = 150, rho_trajectory = rho_true, seed = 42 ) head(sim$Y_df) ``` ## Fitting the DC-VAR Model The main fitting function is `dcvar()`. It accepts a data frame and the names of two variables to model: ```{r fit} fit <- dcvar( data = sim$Y_df, vars = c("y1", "y2"), chains = 4, iter_warmup = 1000, iter_sampling = 2000, seed = 123 ) ``` ## Inspecting Results ```{r inspect} # Quick overview print(fit) # Detailed summary summary(fit) # Posterior means for VAR parameters coef(fit) # Time-varying rho as a data frame rho_df <- rho_trajectory(fit) head(rho_df) # MCMC diagnostics dcvar_diagnostics(fit) ``` ### Fitted Values and Predictions The `fitted()` method returns one-step-ahead fitted values from the VAR(1) component. The `predict()` method adds marginal prediction intervals for normal margin fits: ```{r fitted-predict} # VAR(1) fitted values: y_hat[t] = mu + Phi * (y[t-1] - mu) fit_df <- fitted(fit) head(fit_df) # Predictions with 95% marginal intervals pred_df <- predict(fit) head(pred_df) # Custom interval level pred_90 <- predict(fit, ci_level = 0.90) ``` ### Tidy Parameter Summary Use `as.data.frame()` to export the full parameter summary as a tidy data frame: ```{r as-data-frame} param_df <- as.data.frame(fit) head(param_df) ``` ### Clinical Interpretation `interpret_rho_trajectory()` provides a human-readable summary of the estimated dependence trajectory: ```{r interpret} interpret_rho_trajectory(fit) ``` ## Visualisation ```{r plot} # Rho trajectory with credible intervals # Red line = true trajectory (simulation only) plot_rho(fit, true_rho = sim$true_params$rho) # VAR coefficient heatmap plot_phi(fit) # MCMC diagnostics (trace, Rhat, ESS) plot(fit, type = "diagnostics") # Posterior predictive check # Currently available for normal and exponential margins plot_ppc(fit) ``` ## LOO-CV Model Comparison Compare the DC-VAR against a constant-correlation baseline: ```{r compare} fit_constant <- dcvar_constant(sim$Y_df, vars = c("y1", "y2")) dcvar_compare(dcvar = fit, constant = fit_constant) ```