bvarnet allows combining different outcome families in a
single VAR model by passing a named vector to the family
argument. This is useful when the variables in the network are measured
on different scales.
In this example we fit a mixed-family VAR(1) with three types of outcome:
stress_level (5-point Likert
items)happyornot_bin (binarised
daily average)sleep_duration (hours)Again, we start with loading the data
For a mixed-family model we specify priors for all parameter types
that can appear. Here that means we need to specify priors for the
following parameters: intercept, phi
(temporal), beta (fixed effects), kappa
(ordinal thresholds), and sigma (gaussian residual SD).
We pass a named character vector to family so that each
outcome gets the appropriate likelihood.
fit_mixed <- bvar(
id_col = "id",
time_col = "day",
y_cols = c("stress_level", "happyornot", "sleep_duration"),
x_cols = NULL,
re_cols = NULL,
re_temporal = FALSE,
K = 1,
data = studentlife,
family = c(stress_level = "ordinal",
happyornot = "bernoulli",
sleep_duration = "gaussian"),
priors = priors,
iter = 4000,
warmup = 2000,
chains = 4,
cores = 4,
seed = 1337
)print(fit_mixed)
#> BVAR Network fit
#> ========================================
#> Family: mixed (stress_level=ordinal, happyornot=bernoulli, sleep_duration=gaussian)
#> Outcomes (p): 3
#> Lags (K): 1
#> Fixed eff.: 1
#> Observations: 87
#> Rhat max: 1.001
#> Divergences: 1 WARNING: check model/priors.
#> Priors:
#> intercept ~ Normal(0, 1)
#> beta ~ Normal(0, 1)
#> phi ~ Normal(0, 0.5)
#> sigma ~ Half-Normal(0, 1)
#> kappa ~ Normal(0, 1)
#> Total time: 1.2 sec
#> ========================================summary(fit_mixed)
#> BVAR Network Summary
#> ==================================================
#> Family: mixed (stress_level=ordinal, happyornot=bernoulli, sleep_duration=gaussian) | p=3 | K=1 | n=87
#> Rhat max: 1.001 | Divergences: 1
#> WARNING: divergent transitions detected — check model/priors.
#>
#> --- Intercept ---
#> predictor outcome mean median q5 q95 rhat ess_bulk ess_tail
#> Intercept happyornot -1.167 -1.160 -1.734 -0.626 1 11176.10 9116.660
#> Intercept sleep_duration 5.644 5.648 5.297 5.986 1 12937.83 9771.961
#>
#>
#> --- Autoregressive ---
#> predictor outcome mean median q5 q95 rhat ess_bulk ess_tail
#> lag1_stress_level stress_level 0.196 0.194 0.033 0.367 1 8462.812 8610.870
#> lag1_happyornot happyornot 0.441 0.440 -0.257 1.136 1 12339.308 9618.399
#> lag1_sleep_duration sleep_duration 0.226 0.225 0.108 0.345 1 10963.284 9073.396
#>
#>
#> --- Cross-lagged ---
#> predictor outcome mean median q5 q95 rhat ess_bulk ess_tail
#> lag1_happyornot stress_level 0.188 0.192 -0.258 0.627 1.000 11502.547 9541.818
#> lag1_sleep_duration stress_level -0.104 -0.102 -0.189 -0.023 1.000 7852.874 8120.769
#> lag1_stress_level happyornot -0.234 -0.230 -0.650 0.175 1.000 9856.815 9572.424
#> lag1_sleep_duration happyornot 0.067 0.067 -0.120 0.248 1.000 9073.367 9094.861
#> lag1_stress_level sleep_duration -0.198 -0.199 -0.453 0.053 1.000 11200.448 9478.212
#> lag1_happyornot sleep_duration -0.292 -0.297 -0.868 0.285 1.001 13926.942 10143.977
#>
#>
#> --- Residual SD ---
#> predictor outcome mean median q5 q95 rhat ess_bulk ess_tail
#> sleep_duration sigma 1.418 1.411 1.249 1.61 1 13626.98 10426.3
#>
#>
#> --- Threshold ---
#> predictor outcome mean median q5 q95 rhat ess_bulk ess_tail
#> kappa(stress_level, c1) — -0.085 -0.067 -0.458 0.232 1.000 5995.39 4848.848
#> kappa(stress_level, c2) — 0.243 0.243 -0.034 0.515 1.000 15220.91 12517.771
#> kappa(stress_level, c3) — 0.484 0.476 0.192 0.803 1.000 15744.65 13041.185
#> kappa(stress_level, c4) — 0.992 0.955 0.505 1.606 1.001 11753.41 11016.804
#>
#>
#> ==================================================
#> Use extract_param() or extract_param(fit, type = "...") for the full parameter table.
#> Use extract_network_matrix() for the temporal network matrix.The temporal network can be extracted and inspected as usual:
As every other model, the mixed model can be extended by random
effects (Vignette(Random-Effects)), hypothesis tests can be
performed (Vignette(Hypothesis-Testing)).